{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tfrbm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from tfrbm import BBRBM, GBRBM\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "import numpy as np\n",
    "import mnist\n",
    "import random\n",
    "random.seed(20)\n",
    "images = mnist.train_images()\n",
    "labels = mnist.train_labels()\n",
    "images = np.reshape(images,(60000,784))\n",
    "\n",
    "test_images = mnist.test_images()\n",
    "test_labels = mnist.test_labels()\n",
    "test_images = np.reshape(test_images,(10000,784))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "#generate 10k random integers between 0,60000\n",
    "d_indices = random.sample(range(0,60000),10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "tr_images = images[d_indices,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "tr_labels = labels[d_indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "random.seed(40)\n",
    "val_indices = random.sample(range(0,60000),1000)\n",
    "val_img = images[val_indices,:]\n",
    "val_lab = labels[val_indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# from pca_for_large_dimension import pca\n",
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis \n",
    "from sklearn.decomposition import PCA\n",
    "pca = PCA(25)\n",
    "pca.fit(tr_images)\n",
    "red_data = pca.transform(tr_images)\n",
    "val_img = pca.transform(val_img)\n",
    "test_images = pca.transform(test_images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1000, 25)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_img.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.layers import Dense, Dropout, Flatten\n",
    "input_shape=(25,)\n",
    "num_classes = 10\n",
    "model = keras.Sequential()\n",
    "model.add(Dense(256, activation=\"sigmoid\",input_shape=input_shape))\n",
    "# model.add(Dropout(0.2))\n",
    "model.add(Dense(256, activation=\"sigmoid\"))\n",
    "model.add(Dense(num_classes, activation='softmax'))\n",
    "\n",
    "model.compile(loss=keras.losses.sparse_categorical_crossentropy,\n",
    "              optimizer=keras.optimizers.Adam(lr=0.0001,beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0001),\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_12 (Dense)             (None, 256)               6656      \n",
      "_________________________________________________________________\n",
      "dense_13 (Dense)             (None, 256)               65792     \n",
      "_________________________________________________________________\n",
      "dense_14 (Dense)             (None, 10)                2570      \n",
      "=================================================================\n",
      "Total params: 75,018\n",
      "Trainable params: 75,018\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 10000 samples, validate on 1000 samples\n",
      "Epoch 1/30\n",
      "10000/10000 [==============================] - 0s 44us/step - loss: 0.3029 - acc: 0.9159 - val_loss: 0.3224 - val_acc: 0.9140\n",
      "Epoch 2/30\n",
      "10000/10000 [==============================] - 0s 44us/step - loss: 0.2960 - acc: 0.9176 - val_loss: 0.3194 - val_acc: 0.9160\n",
      "Epoch 3/30\n",
      "10000/10000 [==============================] - 0s 45us/step - loss: 0.2904 - acc: 0.9188 - val_loss: 0.3143 - val_acc: 0.9210\n",
      "Epoch 4/30\n",
      "10000/10000 [==============================] - 0s 44us/step - loss: 0.2848 - acc: 0.9188 - val_loss: 0.3098 - val_acc: 0.9190\n",
      "Epoch 5/30\n",
      "10000/10000 [==============================] - 0s 44us/step - loss: 0.2793 - acc: 0.9229 - val_loss: 0.3087 - val_acc: 0.9200\n",
      "Epoch 6/30\n",
      "10000/10000 [==============================] - 0s 45us/step - loss: 0.2741 - acc: 0.9242 - val_loss: 0.3084 - val_acc: 0.9190\n",
      "Epoch 7/30\n",
      "10000/10000 [==============================] - 0s 45us/step - loss: 0.2698 - acc: 0.9252 - val_loss: 0.3014 - val_acc: 0.9210\n",
      "Epoch 8/30\n",
      "10000/10000 [==============================] - 0s 46us/step - loss: 0.2651 - acc: 0.9266 - val_loss: 0.2998 - val_acc: 0.9230\n",
      "Epoch 9/30\n",
      "10000/10000 [==============================] - 0s 45us/step - loss: 0.2606 - acc: 0.9277 - val_loss: 0.2989 - val_acc: 0.9200\n",
      "Epoch 10/30\n",
      "10000/10000 [==============================] - 0s 44us/step - loss: 0.2564 - acc: 0.9278 - val_loss: 0.2995 - val_acc: 0.9230\n",
      "Epoch 11/30\n",
      "10000/10000 [==============================] - 0s 45us/step - loss: 0.2525 - acc: 0.9298 - val_loss: 0.2953 - val_acc: 0.9250\n",
      "Epoch 12/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2489 - acc: 0.9305 - val_loss: 0.2939 - val_acc: 0.9210\n",
      "Epoch 13/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2452 - acc: 0.9322 - val_loss: 0.2940 - val_acc: 0.9230\n",
      "Epoch 14/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2417 - acc: 0.9329 - val_loss: 0.2914 - val_acc: 0.9280\n",
      "Epoch 15/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2385 - acc: 0.9349 - val_loss: 0.2912 - val_acc: 0.9150\n",
      "Epoch 16/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2357 - acc: 0.9349 - val_loss: 0.2885 - val_acc: 0.9220\n",
      "Epoch 17/30\n",
      "10000/10000 [==============================] - 0s 48us/step - loss: 0.2319 - acc: 0.9363 - val_loss: 0.2880 - val_acc: 0.9230\n",
      "Epoch 18/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2291 - acc: 0.9371 - val_loss: 0.2871 - val_acc: 0.9180\n",
      "Epoch 19/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2261 - acc: 0.9378 - val_loss: 0.2838 - val_acc: 0.9240\n",
      "Epoch 20/30\n",
      "10000/10000 [==============================] - 1s 50us/step - loss: 0.2236 - acc: 0.9394 - val_loss: 0.2826 - val_acc: 0.9230\n",
      "Epoch 21/30\n",
      "10000/10000 [==============================] - 0s 47us/step - loss: 0.2207 - acc: 0.9393 - val_loss: 0.2831 - val_acc: 0.9200\n",
      "Epoch 22/30\n",
      "10000/10000 [==============================] - 1s 50us/step - loss: 0.2185 - acc: 0.9415 - val_loss: 0.2818 - val_acc: 0.9190\n",
      "Epoch 23/30\n",
      "10000/10000 [==============================] - 1s 50us/step - loss: 0.2156 - acc: 0.9421 - val_loss: 0.2795 - val_acc: 0.9240\n",
      "Epoch 24/30\n",
      "10000/10000 [==============================] - 0s 47us/step - loss: 0.2131 - acc: 0.9423 - val_loss: 0.2799 - val_acc: 0.9190\n",
      "Epoch 25/30\n",
      "10000/10000 [==============================] - 1s 51us/step - loss: 0.2104 - acc: 0.9441 - val_loss: 0.2787 - val_acc: 0.9220\n",
      "Epoch 26/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2083 - acc: 0.9432 - val_loss: 0.2767 - val_acc: 0.9220\n",
      "Epoch 27/30\n",
      "10000/10000 [==============================] - 1s 52us/step - loss: 0.2060 - acc: 0.9448 - val_loss: 0.2769 - val_acc: 0.9230\n",
      "Epoch 28/30\n",
      "10000/10000 [==============================] - 0s 49us/step - loss: 0.2039 - acc: 0.9464 - val_loss: 0.2756 - val_acc: 0.9200\n",
      "Epoch 29/30\n",
      "10000/10000 [==============================] - 0s 47us/step - loss: 0.2015 - acc: 0.9461 - val_loss: 0.2742 - val_acc: 0.9210\n",
      "Epoch 30/30\n",
      "10000/10000 [==============================] - 0s 47us/step - loss: 0.1995 - acc: 0.9465 - val_loss: 0.2725 - val_acc: 0.9220\n"
     ]
    }
   ],
   "source": [
    "training=model.fit(red_data,tr_labels,batch_size=40,\n",
    "          epochs=30,\n",
    "          validation_data=(val_img,val_lab))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(training.history['loss'],label=\"training loss\")\n",
    "plt.plot(training.history['val_loss'],label=\"validation loss\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 19us/step\n",
      "accuracy is 0.9067\n"
     ]
    }
   ],
   "source": [
    "loss,acc = model.evaluate(test_images,test_labels)\n",
    "print(\"accuracy is\",acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### now using LDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "red_data = pca.fit(tr_images).transform(tr_images)\n",
    "lda = LinearDiscriminantAnalysis(n_components=10)\n",
    "lda = lda.fit(red_data,tr_labels)\n",
    "red_data2 = lda.transform(red_data)\n",
    "lda_val_data = lda.transform(val_img)\n",
    "lda_test_data = lda.transform(test_images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10000, 9)\n"
     ]
    }
   ],
   "source": [
    "print(red_data2.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_shape=(9,)\n",
    "num_classes = 10\n",
    "model_on_lda = keras.Sequential()\n",
    "model_on_lda.add(Dense(256, activation=\"sigmoid\",input_shape=input_shape))\n",
    "model_on_lda.add(Dropout(0.2))\n",
    "model_on_lda.add(Dense(256, activation=\"sigmoid\",input_shape=input_shape))\n",
    "model_on_lda.add(Dense(num_classes, activation='softmax'))\n",
    "\n",
    "model_on_lda.compile(loss=keras.losses.sparse_categorical_crossentropy,\n",
    "              optimizer=keras.optimizers.Adam(lr=0.001,beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False),\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 10000 samples, validate on 1000 samples\n",
      "Epoch 1/20\n",
      "10000/10000 [==============================] - 1s 119us/step - loss: 1.0496 - acc: 0.7015 - val_loss: 0.4804 - val_acc: 0.8730\n",
      "Epoch 2/20\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.5371 - acc: 0.8359 - val_loss: 0.4307 - val_acc: 0.8770\n",
      "Epoch 3/20\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.5027 - acc: 0.8471 - val_loss: 0.4570 - val_acc: 0.8640\n",
      "Epoch 4/20\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.4839 - acc: 0.8498 - val_loss: 0.4119 - val_acc: 0.8690\n",
      "Epoch 5/20\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4622 - acc: 0.8541 - val_loss: 0.3974 - val_acc: 0.8880\n",
      "Epoch 6/20\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.4481 - acc: 0.8610 - val_loss: 0.3874 - val_acc: 0.8840\n",
      "Epoch 7/20\n",
      "10000/10000 [==============================] - 1s 94us/step - loss: 0.4322 - acc: 0.8648 - val_loss: 0.3794 - val_acc: 0.8840\n",
      "Epoch 8/20\n",
      "10000/10000 [==============================] - 1s 89us/step - loss: 0.4207 - acc: 0.8670 - val_loss: 0.3726 - val_acc: 0.8860\n",
      "Epoch 9/20\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4111 - acc: 0.8698 - val_loss: 0.3726 - val_acc: 0.8860\n",
      "Epoch 10/20\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.4023 - acc: 0.8735 - val_loss: 0.3450 - val_acc: 0.8900\n",
      "Epoch 11/20\n",
      "10000/10000 [==============================] - 1s 89us/step - loss: 0.3909 - acc: 0.8723 - val_loss: 0.3382 - val_acc: 0.8910\n",
      "Epoch 12/20\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.3813 - acc: 0.8790 - val_loss: 0.3476 - val_acc: 0.8890\n",
      "Epoch 13/20\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.3744 - acc: 0.8816 - val_loss: 0.3385 - val_acc: 0.8890\n",
      "Epoch 14/20\n",
      "10000/10000 [==============================] - 1s 93us/step - loss: 0.3641 - acc: 0.8814 - val_loss: 0.3502 - val_acc: 0.8880\n",
      "Epoch 15/20\n",
      "10000/10000 [==============================] - 1s 94us/step - loss: 0.3595 - acc: 0.8855 - val_loss: 0.3373 - val_acc: 0.8940\n",
      "Epoch 16/20\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.3514 - acc: 0.8912 - val_loss: 0.3381 - val_acc: 0.8920\n",
      "Epoch 17/20\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.3413 - acc: 0.8881 - val_loss: 0.3236 - val_acc: 0.8950\n",
      "Epoch 18/20\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.3359 - acc: 0.8899 - val_loss: 0.3182 - val_acc: 0.8950\n",
      "Epoch 19/20\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.3308 - acc: 0.8919 - val_loss: 0.3226 - val_acc: 0.8950\n",
      "Epoch 20/20\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.3328 - acc: 0.8926 - val_loss: 0.3089 - val_acc: 0.8990\n"
     ]
    }
   ],
   "source": [
    "lda_train=model_on_lda.fit(red_data2,tr_labels,batch_size=20,\n",
    "          epochs=20,validation_data=(lda_val_data,val_lab))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzt3Xl81NW9//HXJ+tk34EkLGFXAggYkYqKVEXQKtVai0urXpVqa3vbXvsQ7+11vb319lpLtWqveu1irUtRLL8ritWCuwgoIkGWsCcBsu97cn5/nG+SScgySSaZZObzfDy+j3xn5sx3DpPhPSfne77niDEGpZRS/iXI1xVQSinlfRruSinlhzTclVLKD2m4K6WUH9JwV0opP6ThrpRSfkjDXSml/JCGu1JK+SENd6WU8kMhvnrh5ORkk5GR4auXV0qpEWnbtm1FxpiU3sr5LNwzMjLYunWrr15eKaVGJBE57Ek57ZZRSik/pOGulFJ+SMNdKaX8kM/63JVSQ6+xsZHc3Fzq6up8XRXVC5fLxdixYwkNDe3X8zXclQogubm5xMTEkJGRgYj4ujqqG8YYiouLyc3NZeLEif06hnbLKBVA6urqSEpK0mAf5kSEpKSkAf2FpeGuVIDRYB8ZBvp7GnHhvuVQCf/1xm50eUCllOreiAv3L3LLeWLTfspqGn1dFaVUH5WVlfH444/367kXX3wxZWVlPZa5++67eeutt/p1/M4yMjIoKiryyrF8YcSFe1p8BAB5ZbU+rolSqq96Cvfm5uYen7t+/Xri4+N7LHP//fdzwQUX9Lt+/mTEhXu6E+75Gu5KjTirVq1i//79zJkzh5/+9Kds2rSJxYsXc8011zBr1iwAvv71r3P66aeTmZnJk08+2fbc1pb0oUOHOPXUU7nlllvIzMxkyZIl1NbaPLjhhhtYs2ZNW/l77rmHefPmMWvWLHbv3g1AYWEhF154IfPmzeO73/0uEyZM6LWF/vDDDzNz5kxmzpzJ6tWrAaiuruaSSy7htNNOY+bMmbz44ott/8YZM2Ywe/Zs7rjjDu++gX0w4oZCpsW7AA13pQbqvv+Xza78Cq8ec0ZaLPdcmtnt4w8++CA7d+5k+/btAGzatIlPPvmEnTt3tg35e+aZZ0hMTKS2tpYzzjiDb3zjGyQlJXU4zr59+3j++ed56qmnuOqqq3j55Ze57rrrTnq95ORkPv30Ux5//HEeeughnn76ae677z6++tWvctddd/HGG290+ALpyrZt2/j973/P5s2bMcZw5plnsmjRIg4cOEBaWhqvvfYaAOXl5ZSUlLB27Vp2796NiPTajTSYRlzLPTEqjPCQIPLL9SIMpfzB/PnzO4zlfuSRRzjttNNYsGABR48eZd++fSc9Z+LEicyZMweA008/nUOHDnV57CuuuOKkMu+//z4rVqwAYOnSpSQkJPRYv/fff5/LL7+cqKgooqOjueKKK3jvvfeYNWsWb731FnfeeSfvvfcecXFxxMbG4nK5uPnmm3nllVeIjIzs69vhNSOu5S4ipMdHaJ+7UgPUUwt7KEVFRbXtb9q0ibfeeouPPvqIyMhIzjvvvC7HeoeHh7ftBwcHt3XLdFcuODiYpqYmgD6PtOuu/LRp09i2bRvr16/nrrvuYsmSJdx999188sknvP3227zwwgv89re/5R//+EefXs9bRlzLHexJVe2WUWrkiYmJobKystvHy8vLSUhIIDIykt27d/Pxxx97vQ5nn302L730EgBvvvkmpaWlPZY/99xzefXVV6mpqaG6upq1a9dyzjnnkJ+fT2RkJNdddx133HEHn376KVVVVZSXl3PxxRezevXqtu4nXxhxLXew/e7v7C30dTWUUn2UlJTEwoULmTlzJsuWLeOSSy7p8PjSpUv53e9+x+zZs5k+fToLFizweh3uuecerr76al588UUWLVpEamoqMTEx3ZafN28eN9xwA/Pnzwfg5ptvZu7cuWzYsIGf/vSnBAUFERoayhNPPEFlZSXLly+nrq4OYwy//vWvvV5/T4mvLgbKysoy/V2sY/Vbe/nN2/vY88AywkJG5B8fSvnEl19+yamnnurravhUfX09wcHBhISE8NFHH3Hbbbf5tIXdk65+XyKyzRiT1dtzR2jLPQJj4ERFHeMSfXfCQik18hw5coSrrrqKlpYWwsLCeOqpp3xdpUHRa7iLyDPA14ACY8zMLh4X4DfAxUANcIMx5lNvV9RdutuFTBruSqm+mDp1Kp999pmvqzHoPOnT+AOwtIfHlwFTnW0l8MTAq9WzNL2QSSmletRruBtj3gVKeiiyHPiTsT4G4kUk1VsV7EpqnF7IpJRSPfHG2ch04Kjb7VznvpOIyEoR2SoiWwsL+z/axRUaTHJ0GHlleiGTUkp1xRvh3tWkw10OwTHGPGmMyTLGZKWkpAzoRXWsu1JKdc8b4Z4LjHO7PRbI98Jxe5QWp+GuVCCIjo4GID8/nyuvvLLLMueddx69Da1evXo1NTU1bbc9mULYE/feey8PPfTQgI/jbd4I93XAd8RaAJQbY4554bg9am2566IdSgWGtLS0thkf+6NzuHsyhfBI1mu4i8jzwEfAdBHJFZGbRORWEbnVKbIeOADkAE8B3xu02rpJi3dR3dBMRW3TULycUsoL7rzzzg7zud9777386le/oqqqivPPP79tet6//e1vJz330KFDzJxpR2PX1tayYsUKZs+ezbe+9a0Oc8vcdtttZGVlkZmZyT333APYycjy8/NZvHgxixcvBjouxtHVlL49TS3cne3bt7NgwQJmz57N5Zdf3ja1wSOPPNI2DXDrpGXvvPMOc+bMYc6cOcydO7fHaRn6o9dx7saYq3t53ADf91qNPOQ+1j0uMnSoX16pke/1VXD8C+8ec8wsWPZgtw+vWLGCH/3oR3zve7YN+NJLL/HGG2/gcrlYu3YtsbGxFBUVsWDBAi677LJu1xF94okniIyMZMeOHezYsYN58+a1Pfbzn/+cxMREmpubOf/889mxYwc//OEPefjhh9m4cSPJyckdjtXdlL4JCQkeTy3c6jvf+Q6PPvooixYt4u677+a+++5j9erVPPjggxw8eJDw8PC2rqCHHnqIxx57jIULF1JVVYXL5fL4bfbEiL12X8e6KzXyzJ07l4KCAvLz8/n8889JSEhg/PjxGGP413/9V2bPns0FF1xAXl4eJ06c6PY47777blvIzp49m9mzZ7c99tJLLzFv3jzmzp1LdnY2u3bt6rFO3U3pC55PLQx20rOysjIWLVoEwPXXX8+7777bVsdrr72WP//5z4SE2Db1woUL+clPfsIjjzxCWVlZ2/3eMiKnHwC3cC/XcFeqX3poYQ+mK6+8kjVr1nD8+PG2LornnnuOwsJCtm3bRmhoKBkZGV1O9euuq1b9wYMHeeihh9iyZQsJCQnccMMNvR6np/N2nk4t3JvXXnuNd999l3Xr1vHAAw+QnZ3NqlWruOSSS1i/fj0LFizgrbfe4pRTTunX8bsyYlvuSVFhhIUE6bzuSo0wK1as4IUXXmDNmjVto1/Ky8sZNWoUoaGhbNy4kcOHD/d4jHPPPZfnnnsOgJ07d7Jjxw4AKioqiIqKIi4ujhMnTvD666+3Pae76Ya7m9K3r+Li4khISGhr9T/77LMsWrSIlpYWjh49yuLFi/nlL39JWVkZVVVV7N+/n1mzZnHnnXeSlZXVtgygt4zYlntQkJAW5yJfL2RSakTJzMyksrKS9PR0UlPtxezXXnstl156KVlZWcyZM6fXFuxtt93GjTfeyOzZs5kzZ07bdLynnXYac+fOJTMzk0mTJrFw4cK256xcuZJly5aRmprKxo0b2+7vbkrfnrpguvPHP/6RW2+9lZqaGiZNmsTvf/97mpubue666ygvL8cYw49//GPi4+P593//dzZu3EhwcDAzZsxg2bJlfX69nozIKX9bXfPUx9Q3tfDybWd5qVZK+Ted8ndkGciUvyO2Wwb0KlWllOrOiA/3ExV1NDa3+LoqSik1rIzscI9z0eIs2qGU8oxe1T0yDPT3NLLDvW2su4a7Up5wuVwUFxdrwA9zxhiKi4sHdGHTiB0tA3ohk1J9NXbsWHJzcxnIlNtqaLhcLsaOHdvv54/wcLffajrWXSnPhIaGMnHiRF9XQw2BEd0tExkWQkJkqLbclVKqkxEd7qDDIZVSqit+Eu56QlUppdyN+HBP15a7UkqdZMSHe1q8i8r6JirqGn1dFaWUGjb8INx1OKRSSnWm4a6UUn7Io3AXkaUiskdEckRkVRePTxCRt0Vkh4hsEpH+j7zvo/bl9vSkqlJKtfJkgexg4DFgGTADuFpEZnQq9hDwJ2PMbOB+4Bfermh3UqLDCQ0WbbkrpZQbT1ru84EcY8wBY0wD8AKwvFOZGcDbzv7GLh4fNEFBwpg4l4a7Ukq58STc04GjbrdznfvcfQ58w9m/HIgRkaTOBxKRlSKyVUS2enNui7Q4HQ6plFLuPAn3k1ehhc5Tyt0BLBKRz4BFQB7QdNKTjHnSGJNljMlKSUnpc2W7k64XMimlVAeeTByWC4xzuz0WyHcvYIzJB64AEJFo4BvGmHJvVbI3afERHK+oo6m5hZDgET8ASCmlBsyTJNwCTBWRiSISBqwA1rkXEJFkEWk91l3AM96tZs/S4iNobjEUVNYP5csqpdSw1Wu4G2OagNuBDcCXwEvGmGwRuV9ELnOKnQfsEZG9wGjg54NU3y61Tv2r/e5KKWV5NJ+7MWY9sL7TfXe77a8B1ni3ap5rH+teS69LgiulVADwiw7qVF1uTymlOvCLcI8ODyEuQhftUEqpVn4R7mBPqh4r13BXSinwo3BPj3fp/DJKKeXwm3DX5faUUqqdX4V7eW0jVfUnXRirlFIBx6/CHeCYtt6VUsp/wj3duZApT8NdKaX8J9zTdKy7Ukq18ZtwHxXjIjhIF+1QSinwo3APDhLGxOqiHUopBX4U7mDnmNE+d6WU8rNwT4t3ka9XqSqllL+FewTHy+tobum8UJRSSgUWvwv3xmZDUZUu2qGUCmx+Fe7u87orpVQg86twbx/rruGulApsHoW7iCwVkT0ikiMiq7p4fLyIbBSRz0Rkh4hc7P2q9k6X21NKKavXcBeRYOAxYBkwA7haRGZ0KvYz7Nqqc7ELaD/u7Yp6IsYVSowrRK9SVUoFPE9a7vOBHGPMAWNMA/ACsLxTGQPEOvtxQL73qtg3OtZdKaU8WyA7HTjqdjsXOLNTmXuBN0XkB0AUcIFXatcPOq+7Ukp51nKXLu7rPJD8auAPxpixwMXAsyJy0rFFZKWIbBWRrYWFhX2vrQfS4nUKAqWU8iTcc4FxbrfHcnK3y03ASwDGmI8AF5Dc+UDGmCeNMVnGmKyUlJT+1bgXafERlNY0UtOgi3YopQKXJ+G+BZgqIhNFJAx7wnRdpzJHgPMBRORUbLgPTtO8F+k69a9SSvUe7saYJuB2YAPwJXZUTLaI3C8ilznF/gW4RUQ+B54HbjDG+GQOAB3rrpRSnp1QxRizHljf6b673fZ3AQu9W7X+0XBXSik/u0IVYHRMOEGi4a6UCmx+F+4hwUGMiXWRp33uSqkA5nfhDjrWXSml/DfcddEOpVQA89twP1ZWR4su2qGUClB+Ge7p8S4amlsoqtZFO5RSgckvwz1NL2RSSgU4Pw937XdXSgUmDXellPJDfhnusa4QosNDdF53pVTA8stwFxGd+lcpFdD8Mtyh9UImPaGqlApMfh7u2nJXSgUmvw339PgIiqsbqGts9nVVlFJqyPltuKfFuwAdMaOUCkz+G+5xeiGTUipw+W+461h3pVQA89twHxPnQgQd666UCkgehbuILBWRPSKSIyKrunj81yKy3dn2ikiZ96vaN6HBQYyO0bHuSqnA1OsaqiISDDwGXAjkAltEZJ2zbioAxpgfu5X/ATB3EOraZ6nxLp3XXSkVkDxpuc8HcowxB4wxDcALwPIeyl8NPO+Nyg2UXsiklApUnoR7OnDU7Xauc99JRGQCMBH4x8CrNnDp8RHkldVijC7aoZQKLJ6Eu3RxX3dpuQJYY4zp8sohEVkpIltFZGthYaGndey3tDgXDU0tFFc3DPprKaXUcOJJuOcC49xujwXyuym7gh66ZIwxTxpjsowxWSkpKZ7Xsp90OKRSKlB5Eu5bgKkiMlFEwrABvq5zIRGZDiQAH3m3iv2n4a6UClS9hrsxpgm4HdgAfAm8ZIzJFpH7ReQyt6JXAy+YYdTBne6Ee56eVFVKBZheh0ICGGPWA+s73Xd3p9v3eq9a3hEfGUpEaLC23JVSAcdvr1AFXbRDKRW4/DrcQed1V0oFJr8PdzvWXfvclVKBxe/DPS0+gqKqel20QykVUAIi3AGOl2vrXSkVOAIg3HVFJqVU4PH7cG8f667hrpQKHH4f7mPiWlvu2i2jlAocfh/u4SHBpMSEa7eMUiqg+H24gzPWXRftUEoFkIAI9/R4l/a5K6UCSkCEe1qcvUp1GM1pppRSgyowwj0+grrGFkprGn1dFaWUGhIBE+6gY92VUoEjIMJdx7orpQJNQIS7XqWqlAo0ARHuiVFhhIcEabgrpQJGQIS7iJAeH6FXqSqlAoZH4S4iS0Vkj4jkiMiqbspcJSK7RCRbRP7i3WoOnF7IpJQKJL2uoSoiwcBjwIVALrBFRNYZY3a5lZkK3AUsNMaUisiowapwf6XFu3hnb6Gvq6GUUkPCk5b7fCDHGHPAGNMAvAAs71TmFuAxY0wpgDGmwLvVHLi0+AgKKutpaGrxdVWUUmrQeRLu6cBRt9u5zn3upgHTROQDEflYRJZ2dSARWSkiW0Vka2Hh0Lai0+IjMAZOVGi/u1LK/3kS7tLFfZ2v4w8BpgLnAVcDT4tI/ElPMuZJY0yWMSYrJSWlr3UdEB3rrpQKJJ6Eey4wzu32WCC/izJ/M8Y0GmMOAnuwYT9s6FWqSqlA4km4bwGmishEEQkDVgDrOpV5FVgMICLJ2G6aA96s6EClxumFTEqpwNFruBtjmoDbgQ3Al8BLxphsEblfRC5zim0AikVkF7AR+KkxpniwKt0frtBgkqPDyNOx7kqpANDrUEgAY8x6YH2n++522zfAT5xt2EqLj9CWu1IqIATEFaqtWud1V0opfxdY4R6vi3YopQJDgIW7i+qGZipqm3xdFaWUGlQBFe461l0pFSgCKtx1rLtSKlAEZrjr7JBKKT8XUOGeFBVGWEiQdssopfxeQIV7UJCQFufSRTuUUn4voMId9EImpVRg0HBXSik/FJDhfqKijp155b6uilJKDZqAC/elmWOIjwzj0t++z6qXd1BYWe/rKimllNcFXLjPSItl4x3ncdPCiazZlsvihzbxu3f2U9/U7OuqKaWU1wRcuAPERYTys6/N4M0fn8uCSYk8+PpuLnz4Xd7YeVznnVFK+YWADPdWk1Kiefr6M3j2pvm4QoO49c/buOapzezKr/B11ZRSakACOtxbnTM1hfU/PIcHlmey+3gFX3v0Pe565QuKqrQ/Xik1Mmm4O0KCg/j2VzLYdMdirj8rg79uPcri/97Ek+/up6GpxdfVU0qpPvEo3EVkqYjsEZEcEVnVxeM3iEihiGx3tpu9X9WhERcZyj2XZvLGj84lKyOB/1y/myW/foc3s7U/Xik1cvQa7iISDDwGLANmAFeLyIwuir5ojJnjbE97uZ5DbsqoaH5/43z+cOMZhAQHsfLZbVz3v5vZfVz745VSw58nLff5QI4x5oAxpgF4AVg+uNUaPs6bPorX//kc7r10BjvzKrj4N+9x55odbD5QTHOLtuSVUsOTJwtkpwNH3W7nAmd2Ue4bInIusBf4sTHmaBdlRqTQ4CBuWDiRr89NZ/Vb+/jL5iO8uPUoiVFhXHDqKC7KHMPCKcm4QoN9XVWllAJAeutHFpFvAhcZY252bn8bmG+M+YFbmSSgyhhTLyK3AlcZY77axbFWAisBxo8ff/rhw4e99y8ZQlX1Tbyzp5AN2cfZuLuAyvomIsOCOW96CktmjGHxKaOIiwj1dTWVUn5IRLYZY7J6LedBuH8FuNcYc5Fz+y4AY8wvuikfDJQYY+J6Om5WVpbZunVrb/Ub9hqaWvjoQDFvZh/nzV0nKKysJyRI+MrkJJZkjmHJjNGMjnX5uppKKT/hzXAPwXa1nA/kAVuAa4wx2W5lUo0xx5z9y4E7jTELejquv4S7u5YWw/bcMjZkH+fN7BMcLKoGYM64eC7KHMOSzNFMTon2cS2VUiOZ18LdOdjFwGogGHjGGPNzEbkf2GqMWScivwAuA5qAEuA2Y8zuno7pj+HuzhhDTkGVDfpdJ9iRa2ehnDIqmosyR7N8TjrTRsf4uJZKqZHGq+E+GPod7sc+h81PwiUPQWiE9ys2SPLLavn7rhNsyD7O5oMlNLcYMtNiuXxuOpedlsYo7bpRSnnAf8N9y//Ca/8CaXNgxV8gNs37lRtkhZX1/N+OfF79LI/Pc8sJElg4JZnL56ZzUeYYosI9GcSklApE/hvuALvXwyu3QFg0XP0XSD/du5UbQjkFVfxtex5rP8sjt7SWiNBgLsoczdfnpnP2lGRCgnWGCKVUO/8Od4AT2fD8CqgqgOWPwawrvVc5HzDGsPVwKWs/y+O1Hccor20kOTqcy05L4/K56cxMj0VEfF1NpZSP+X+4A1QXwUvfgcMfwDn/Aot/BkEjv6Vb39TMpj2FvPpZHm9/WUBDcwuTU6K4fG46y+ekMy4x0tdVVEr5SGCEO0BTA6z/F/j0TzD9ErjiSQj3n+GG5TWNrN95jLWf5fHJwRIATp+QwFmTk8jKSGTe+HhiXHrBlFKBInDCHcAY2Pw/sOEuGDXDnmhNmOCdY3dWcQxKD8L4r8AQd5Pkltbwt+35bMg+TnZ+Bc0thiCBU8bEckZGAlkZiZyRkciYOB15o5S/Cqxwb7X/H/DXGyAoBL71HEz4iveOnf8ZfPwE7HwFWhrh1Evhst9CRLz3XqMPquub2H60jC2HSth6qJRPj5RS02DXgR2bEMH8jEQn7BOYnBJNUJD21yvlDwIz3AGKcuD5b0HpYfjawzDvO/0/VnMT7HnNhvqRj+zonLnfhqgk2PQgxKbDN/8A6fO8Vv3+amxu4ctjFWw5VMrWQyVsOVRCUVUDAPGRoWRNSGgL+5npcYSH6CRnSo1EgRvuALWlsOafbEt+wffgwgcguA9jx2vL4LNn7cVS5UcgfgKceSvMvRZczpQ5Rz+Bv94I1QWw5Ocw/5Yh76bpiTGGw8U1fHKohK1O6/6AMx1CeEgQ8ycmsnBKMmdPSWZGaqy27JUaIQI73MG2ut/8GWx+AiafD1c+03sXSvF+2Pw7+Ow5aKyGCWfDgttg+jII6qKlW1MCa78L+96EGcvhskfbw38YKqqqZ+uhUjYfLObDnGL2nKgEbMv+rMlJbWE/PjFSh10qNUxpuLfa9kd7RWtCBlzzIiRN7vi4MXDwHdv1sneD7a+fdaVtqafN6f34LS3w0aPw1n0QP95203jyvGGgoKKOD/cX835OER/kFHGsvA6wffZnT0lm4ZRkzpqcRFJ0uI9rqpRqpeHu7tAH8NK3oaUJvvlHmLwYGuvgi7/aUC/IhshkOOMmyLoJYkb3/TWOfGy7aWqK4KL/hDNuHlbdNL0xxnCgqJoPnKD/cH8xlXVNAMxIjeXsqTbsz8hIIDJMp0dQylc03DsrPWyvaC3cA7Ovgn1/t0E8eqbtepl5JYQOcAhhdTGsXQk5b0HmFXDpb8AV6536D7Gm5hZ25lfwQU4R7+8rYtvhUhqaWwgLDmLO+HhmpccxMz2WzLQ4JiVH6TQJSg0RDfeu1FfCK9+FPettP/qC2yDjHO+2sFta4IPV8I//sF1B3/wDpM723vF9pLahmS2HSvhgfxGbD5Tw5bEK6ptaAHuC9pTUWDLTWrc4ThkTo8sOKjUINNy7Y4wdTROZOLivc/hDO2KnpgSWPQin3ziiuml609TcwoGiarLzy8nOqyA7v4Ls/HIqnK6c4CBhckoUmWlxZKbFMiMtlszUOOIi9WpapQZCw304qC6CV1bC/rdtt8+lqyHcfxfoMMaQW1pLdn4Fu/LL2ekE/omK+rYyYxMiyEyLZeqoGKaMimZySjSTR0VpP75SHtJwHy5aWuD9X8HG/4TESfaE7piZvq7VkCqqqm9r2WfnV/DlsQoOF9fQ3NL+2UuPj2DyqGimpEQzZVT7lhgV5sOaKzX8aLgPN4fehzU3QV0ZLPkPmPmNwe8aGsYamlo4XFxNTkGV3Qrtz/2FVdQ1trSVS4wKY0pKtA1+ty011qUXXqmA5O01VJcCv8Guofq0MebBbspdCfwVOMMY02NyB1y4g517/pVb4MAme3tUJkw4y86BM/4siE31afWGg5YWQ15ZLTmFVex3wr71C6C0prGtXHhIEBOTo8hIimJiShQTk9u3pKgwvQhL+S2vhbuIBAN7gQuBXGALcLUxZlencjHAa0AYcLuGezdaWuDox3YO+sMfwpHN9mpYsN02489yAv8sO9pGQ6pNcVV9Wyv/UFE1B4tqOFhUxZGSGhqb2z/HMa6QDmHfumUkRxGr0yOrEc7TcPfkLNZ8IMcYc8A58AvAcmBXp3IPAL8E7uhjXQNLUFB7eIOdJuH4Dhv0hz+0E5Vt/7N9LCa1vez4syDlFL9YjKS/kqLDSYoO58xJSR3ub2puIa+sloNF1R22bYdLWfd5Pu7tl+ToMCYlR3NKaowdxZMax7Qx0TqRmvI7noR7OnDU7XYucKZ7ARGZC4wzxvyfiGi490VwiJ1VMn0enHW7bdkX7XFa9h/ZwN/5si0bkWDnkR+/wHbpjDrFzkwZ4K37kOAgJiRFMSEpivOmd3ysrrGZIyU1HCis5lBxNQcLq8kprOLlbbn86SM7RXJIkDBlVDQz0mKZkWrH6c9IjdVhm2pE8yTcu0qOtraQiAQBvwZu6PVAIiuBlQDjx4/3rIaBJigIRp1qtzNutuPySw/ZKYdbu3L2rG8vHxYDKdNt0Kecalv3GvptXKHBTBsdw7TRHYegtrQYjpTU2GGbx+wonvf3FfHKp3ltZdLjI9rH6KfFMSMtlrQ4l/bnqxHBkz73rwDeuxmOAAAPzUlEQVT3GmMucm7fBWCM+YVzOw7YD1Q5TxkDlACX9dTvHrB97t5QUwIFX0LhbrsVfGmnVaguaC+jod8vhZX17Dpmh23uyq9gV34FB4ur27p24iNDOXVMLFNHOyN3nKGbKTHhGvpqSHjzhGoI9oTq+UAe9oTqNcaY7G7KbwLu0BOqPlBd7AS+E/atXwDVhe1lwmIgZRokTLQnbN232LSupzYOcNX1Tew+Xsmu/HJ2HbOBn1NQRbWz8hVArCuky3H6YxMiCdYhm8qLvHZC1RjTJCK3AxuwQyGfMcZki8j9wFZjzLqBV1d5RVQSRC2EjIUd73cP/YLdtk8/dwtkrwXTHlAEhdppixMy7Bq0ncN/GM9VP5iiwkM4fUICp09IaLvPGMPxirr2cfrOtnFPAX/dlttWrnXIpnvgT06JZmxChC5srgaVXsQUyJoboTzX9um7b2WH7c/a0o7lIxJsyMdPgLixdotNb9+PTA7o0TytymoaOozPbx2+mVta22HkTowrhLS4CNLiXaTGR5Ae7+zH2f3RsS7CQvT9VB3pFapq4GrL2oO+81aeB831HcsHh3UM+9h0iEuHuHHt+wHa+gc7s+aBoioOFFaTX1Zrt/K6tn33i7TAnhpJiQ4nzQn+1DgXafERpMVHMGVUNBlJkTrVcgDScFeDyxioKbYt//JcqMjrtJ8HlflgWjo+LzwWokf33Lff22cyNAJOuxrmfRvCogb+bxkmahuayS+v5ViZDfy8slqOldeSX1ZHfrn9AnCfmiEsOIjJo6KZNjq6bUTQ9NExjE2I0KkZ/JiGu/K95iaoOm6Dvvxoe+hXncBtNG03egin8qOQt812E51xM8z/LkSneLPmw5IxhtKaRnJLa9h3ooq9JyqdrYq8stq2chGhwUx1An/66Bimjo5m+pgYxsTqME5/oOGu/NuRzfDhI7D7NQgJhznXwFduP3mN3ABRWdfIvoIq9h63Yb/3RCV7TlRSWNnedRbjCmHa6BimjopmVEw4CVFhJEaFkRDpbFGhJEaFEREarF8Cw5iGuwoMRfvgw0fh8+ftCeJTL4WF/wxje/3sB4TS6oYOLfw9Jyo5UFhFcXVDt71f4SFBbaGfGBVmvwQiQzt8GYxNiGB8YiSJOknbkNNwV4Gl8gR88j+w5WmoK4cJC23IT7lQR/B0obnFUFHbSElNA6XVDZRUN1Ba00BpTWOH2/ZnIyXVDZTXNp50nKiwYMYlRjIhKZLxiXazt6NIj4/Q0T6DQMNdBab6Svj0T/DR41CRa6/OPesHMOubEKILfwxEU3MLZbWNFFXVk1day+HiGo6U1HC0xP48UlLTtq4u2NE+aXERjEuMaAv+8UlRjE+MZHJKlI7z7ycNdxXYmhth5yvwwW+gIBti0uyC6KffAK5Y39Wrsc6OIooeA2GRQ/OalSfg2OfOth2KcyBpCqSfbruv0uZ6ZfnHlhZDYVW9Dfri9sBv3dz7/8HO3TN1dLRz0jeGac6UDrrkYs803JUCO6xy/9s25A++a4dizv02jJnljMF3xuOHhHv3dauLoWjvyVvpYdpGCsWNg+SpkDTV+TnF/oxJ619XkjF2RFJrkOdvtz+rjreXSZpit6K9UHLA3idBdu6h1rBPz7IT13l5KoqahiZyS+3UzDkFVW3nAfYXVNHQbFv8IjAuIdIZ2mlH+UwdFcOklChcoTo1Bmi4K3Wy/M/gg0dg16snj7+PSmm/AKv1gqtY5wKsuHTb0g7u1KJsabYXeRW6B/g++7O2pL1ciKs9wJOn2deoyLNli/dB8X5oqGovHxppR/20hf5USHZCubWF3TpbaFuL3NlqiuzjEgTJ0yH1tPZtzKyOf7XUlNghpblbIW+r3W+9Kjk0yrbox55uw35slp17aBA0NbdwuKSmw0ifvScqOVhUTZOzzm6QQEZyFNNG2dAfHeciOTqc5OhwUqLDSY4JC5gWv4a7Ut1prLXj7StynZ95HS++qsiD+oqOz5Egu3hKbLpd+7bsiO3eaG5oLxOVYsO7NcSTp9v9uHE9t8SNgcpj7WFflOP83Gdfx/2agJhUG7LFOfbEMUBQiG1pp54GqXPsz9Ez+97tY4xtzbeGfe5WOP4FtDgnUmPSbNinzrFfWKYZWprsGgRt+83OfuvW1PF261xGo2faRWjGzD75S9PR0NTCwaJqt9E+lew7UcWh4mpauoitiNBgkmPC2kI/Odp9P5wk53ZKdDixESEjdpSPhrtSA1FX0fVVtxW5tsUbN87OrpnsbElTBmfB88Y6G7itYV+cY+uSONmGeNocGDXD+91K7q9//Iv2sM/bav9i6JLYL5qgYJBgZz/I/pRge39QsD0fUnnMPiUsGsad6aw4ttAuWtPLv6WhqYXi6nqKqxoorKqnqLKeoqoGiqvqKaqy+60/S6rru/wiCA0WEqPCSIpqD/2kqDBnta8wkqM7PtbXLiFjDI3NhrqmZuobW6hrbKa+qZk6Z398YiSjYl19OmYrDXel1OCor7It8LbQbg30PrSEK/Lbl5Y8/KGdsRTsXwTpWe3LS46bP6ApJppbDKU1DRS3BX49hZX1lFTb+4qrnS8G58uixm0aZ3dRYcFtwZ8YGUaLMTaoncCub2ymrrGZuiYb3nWNzV1+qbT6j6/P5LoFE/r1b9JwV0qNHNXFzmpjH9oVx47vsOdFgkJsN1Bry378mXbaiUFS09DkhL79S6C4qoEiJ/iLq+qd+xsIDhJcoUG4QoMJDwlu23eFBuEKCXbub78vPNTe53Lumzo6mtS4iH7VUcNdKTVy1VXA0U/al5bM/9Q5vyG2GyphAkSPgqhRzs8UOyFd6354zMBWHDPGnuSuKbEnx2tLnf1Se64jeZrtTooZ7bV/sqe8tliHUkoNOVcsTL3AbmBPgudts0F/dLMdUnr0EzszaVeT0IW4ug//yERoqLGh3RreNe4B7uy7nyzvTkIGjFtgu4/GL7BDSofJambacldKjVzNTTbgqwvsbKNVhc5+gV1e0v2+6iJO+iIICrVhH5Ho/EzodNvt/tb9sCg4sct+yRz92E5i17p+cXgsjD3DturHn2mvHfDCBWLutFtGKaXctX4R1BTbgI5MtKN1BjoksvWag6Ob7XZkMxTsAowdQjt6phP2Tgs/btyAXtOr4S4iS4HfYNdQfdoY82Cnx28Fvg80A1XASmPMrp6OqeGulPJbdeV2neIjTuDnboXGavtYTBoseQBmXdmvQ3utz11EgoHHgAuBXGCLiKzrFN5/Mcb8zil/GfAwsLRfNVdKqZHOFQdTLrAb2L8aCrLbwz561KBXwZMTqvOBHGPMAQAReQFYDrSFuzHG/XK+KHpfZkcppQJHcEj7NBBnrhySl/Qk3NOBo263c4EzOxcSke8DPwHCgK92dSARWQmsBBg/fnxf66qUUspDnkw911XP/0ktc2PMY8aYycCdwM+6OpAx5kljTJYxJislxf/XvFRKKV/xJNxzgXFut8cC+T2UfwH4+kAqpZRSamA8CfctwFQRmSgiYcAKYJ17ARGZ6nbzEmCf96qolFKqr3rtczfGNInI7cAG7FDIZ4wx2SJyP7DVGLMOuF1ELgAagVLg+sGstFJKqZ55NP2AMWY9sL7TfXe77f+zl+ullFJqAHRpcqWU8kMa7kop5Yd8NreMiBQCh/v59GSgyIvV8Tat38Bo/QZuuNdR69d/E4wxvY4l91m4D4SIbPVkbgVf0foNjNZv4IZ7HbV+g0+7ZZRSyg9puCullB8aqeH+pK8r0Aut38Bo/QZuuNdR6zfIRmSfu1JKqZ6N1Ja7UkqpHgzrcBeRpSKyR0RyRGRVF4+Hi8iLzuObRSRjCOs2TkQ2isiXIpItIiddpSsi54lIuYhsd7a7uzrWINbxkIh84bz2ScteifWI8/7tEJF5Q1i36W7vy3YRqRCRH3UqM+Tvn4g8IyIFIrLT7b5EEfm7iOxzfiZ089zrnTL7RMTrU3B0U7f/FpHdzu9vrYjEd/PcHj8Lg1zHe0Ukz+33eHE3z+3x//sg1u9Ft7odEpHt3Tx3SN5DrzHGDMsNO4/NfmASdo74z4EZncp8D/ids78CeHEI65cKzHP2Y4C9XdTvPOD/fPgeHgKSe3j8YuB17LTOC4DNPvxdH8eO3/Xp+wecC8wDdrrd90tglbO/CvivLp6XCBxwfiY4+wlDULclQIiz/19d1c2Tz8Ig1/Fe4A4PPgM9/n8frPp1evxXwN2+fA+9tQ3nlnvbClDGmAbsVMLLO5VZDvzR2V8DnC8y0NVuPWOMOWaM+dTZrwS+xC5sMpIsB/5krI+BeBFJ9UE9zgf2G2P6e1Gb1xhj3gVKOt3t/jn7I11PaX0R8HdjTIkxphT4O15earKruhlj3jTGNDk3P8ZOye0z3bx/nvDk//uA9VQ/JzuuAp739uv6wnAO965WgOocnm1lnA94OZA0JLVz43QHzQU2d/HwV0TkcxF5XUQyh7RidlGVN0Vkm7MKVmeevMdDYQXd/4fy5fvXarQx5hjYL3WgqwUwh8N7+U/Yv8S60ttnYbDd7nQdPdNNt9ZweP/OAU4YY7qbstzX72GfDOdw92QFKI9WiRpMIhINvAz8yHRcSxbgU2xXw2nAo8CrQ1k3YKExZh6wDPi+iJzb6fHh8P6FAZcBf+3iYV+/f33h0/dSRP4NaAKe66ZIb5+FwfQEMBmYAxzDdn105vPPInA1Pbfaffke9tlwDndPVoBqKyMiIUAc/fuTsF9EJBQb7M8ZY17p/LgxpsIYU+XsrwdCRSR5qOpnjMl3fhYAa7F/+rrr6ypbg2EZ8Kkx5kTnB3z9/rk50dpd5fws6KKMz95L5+Tt14BrjdM53JkHn4VBY4w5YYxpNsa0AE9189o+/Sw6+XEF8GJ3ZXz5HvbHcA73XleAcm63jkq4EvhHdx9ub3P65/4X+NIY83A3Zca0ngMQkfnY97t4iOoXJSIxrfvYE287OxVbB3zHGTWzAChv7X4YQt22lnz5/nXi/jm7HvhbF2U2AEtEJMHpdlji3DeoRGQpdt3iy4wxNd2U8eSzMJh1dD+Pc3k3r+3J//fBdAGw2xiT29WDvn4P+8XXZ3R72rCjOfZiz6L/m3Pf/dgPMoAL++d8DvAJMGkI63Y29s/GHcB2Z7sYuBW41SlzO5CNPfP/MXDWENZvkvO6nzt1aH3/3OsnwGPO+/sFkDXEv99IbFjHud3n0/cP+0VzDLuqWC5wE/Y8ztvY5SPfBhKdslnA027P/Sfns5gD3DhEdcvB9lW3fgZbR4+lAet7+iwM4fv3rPP52oEN7NTOdXRun/T/fSjq59z/h9bPnVtZn7yH3tr0ClWllPJDw7lbRimlVD9puCullB/ScFdKKT+k4a6UUn5Iw10ppfyQhrtSSvkhDXellPJDGu5KKeWH/j8lGpVkQMdv0gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(lda_train.history['loss'],label=\"training loss\")\n",
    "plt.plot(lda_train.history['val_loss'],label=\"validation loss\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 21us/step\n",
      "0.8993\n"
     ]
    }
   ],
   "source": [
    "loss,acc = model_on_lda.evaluate(lda_test_data,test_labels)\n",
    "print(acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3_part_c...using gaussian RBM\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10000, 25)\n"
     ]
    }
   ],
   "source": [
    "from tfrbm import BBRBM, GBRBM\n",
    "print(red_data.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 0: 100%|##########| 1000/1000 [00:01<00:00, 857.22it/s]\n",
      "Train error: 73126.3107\n",
      "\n",
      "Epoch: 1: 100%|##########| 1000/1000 [00:01<00:00, 896.22it/s]\n",
      "Train error: 60782.2626\n",
      "\n",
      "Epoch: 2: 100%|##########| 1000/1000 [00:01<00:00, 913.32it/s]\n",
      "Train error: 57789.5558\n",
      "\n",
      "Epoch: 3: 100%|##########| 1000/1000 [00:01<00:00, 907.59it/s]\n",
      "Train error: 56146.3069\n",
      "\n",
      "Epoch: 4: 100%|##########| 1000/1000 [00:01<00:00, 869.16it/s]\n",
      "Train error: 54920.3405\n",
      "\n",
      "Epoch: 5: 100%|##########| 1000/1000 [00:01<00:00, 885.86it/s]\n",
      "Train error: 54061.3008\n",
      "\n",
      "Epoch: 6: 100%|##########| 1000/1000 [00:01<00:00, 899.68it/s]\n",
      "Train error: 53473.6006\n",
      "\n",
      "Epoch: 7: 100%|##########| 1000/1000 [00:01<00:00, 924.99it/s]\n",
      "Train error: 53069.8201\n",
      "\n",
      "Epoch: 8: 100%|##########| 1000/1000 [00:01<00:00, 910.39it/s]\n",
      "Train error: 52773.0304\n",
      "\n",
      "Epoch: 9: 100%|##########| 1000/1000 [00:01<00:00, 977.82it/s]\n",
      "Train error: 52546.3610\n",
      "\n",
      "Epoch: 10: 100%|##########| 1000/1000 [00:01<00:00, 954.03it/s]\n",
      "Train error: 52359.2069\n",
      "\n",
      "Epoch: 11: 100%|##########| 1000/1000 [00:01<00:00, 958.61it/s]\n",
      "Train error: 52183.6195\n",
      "\n",
      "Epoch: 12: 100%|##########| 1000/1000 [00:01<00:00, 865.18it/s]\n",
      "Train error: 52019.4907\n",
      "\n",
      "Epoch: 13: 100%|##########| 1000/1000 [00:01<00:00, 917.83it/s]\n",
      "Train error: 51851.7795\n",
      "\n",
      "Epoch: 14: 100%|##########| 1000/1000 [00:01<00:00, 890.03it/s]\n",
      "Train error: 51680.7147\n",
      "\n",
      "Epoch: 15: 100%|##########| 1000/1000 [00:01<00:00, 958.69it/s]\n",
      "Train error: 51555.2835\n",
      "\n",
      "Epoch: 16: 100%|##########| 1000/1000 [00:00<00:00, 1014.09it/s]\n",
      "Train error: 51441.1930\n",
      "\n",
      "Epoch: 17: 100%|##########| 1000/1000 [00:01<00:00, 884.68it/s]\n",
      "Train error: 51328.2237\n",
      "\n",
      "Epoch: 18: 100%|##########| 1000/1000 [00:01<00:00, 926.83it/s]\n",
      "Train error: 51263.2246\n",
      "\n",
      "Epoch: 19: 100%|##########| 1000/1000 [00:01<00:00, 888.75it/s]\n",
      "Train error: 51195.5671\n",
      "\n",
      "Epoch: 20: 100%|##########| 1000/1000 [00:01<00:00, 927.61it/s]\n",
      "Train error: 51153.5265\n",
      "\n",
      "Epoch: 21: 100%|##########| 1000/1000 [00:01<00:00, 906.71it/s]\n",
      "Train error: 51109.9335\n",
      "\n",
      "Epoch: 22: 100%|##########| 1000/1000 [00:01<00:00, 966.31it/s]\n",
      "Train error: 51067.6037\n",
      "\n",
      "Epoch: 23: 100%|##########| 1000/1000 [00:01<00:00, 998.68it/s]\n",
      "Train error: 51040.1321\n",
      "\n",
      "Epoch: 24: 100%|##########| 1000/1000 [00:01<00:00, 905.67it/s]\n",
      "Train error: 51019.4754\n",
      "\n",
      "Epoch: 25: 100%|##########| 1000/1000 [00:01<00:00, 923.97it/s]\n",
      "Train error: 50996.4303\n",
      "\n",
      "Epoch: 26: 100%|##########| 1000/1000 [00:01<00:00, 936.26it/s]\n",
      "Train error: 50967.1570\n",
      "\n",
      "Epoch: 27: 100%|##########| 1000/1000 [00:01<00:00, 873.55it/s]\n",
      "Train error: 50959.7879\n",
      "\n",
      "Epoch: 28: 100%|##########| 1000/1000 [00:01<00:00, 907.68it/s]\n",
      "Train error: 50949.7994\n",
      "\n",
      "Epoch: 29: 100%|##########| 1000/1000 [00:01<00:00, 909.59it/s]\n",
      "Train error: 50924.2515\n",
      "\n",
      "Epoch: 30: 100%|##########| 1000/1000 [00:01<00:00, 923.95it/s]\n",
      "Train error: 50922.2686\n",
      "\n",
      "Epoch: 31: 100%|##########| 1000/1000 [00:01<00:00, 896.48it/s]\n",
      "Train error: 50907.2746\n",
      "\n",
      "Epoch: 32: 100%|##########| 1000/1000 [00:01<00:00, 942.12it/s]\n",
      "Train error: 50902.1779\n",
      "\n",
      "Epoch: 33: 100%|##########| 1000/1000 [00:01<00:00, 937.59it/s]\n",
      "Train error: 50894.7770\n",
      "\n",
      "Epoch: 34: 100%|##########| 1000/1000 [00:01<00:00, 939.79it/s]\n",
      "Train error: 50885.3177\n",
      "\n",
      "Epoch: 35: 100%|##########| 1000/1000 [00:01<00:00, 923.30it/s]\n",
      "Train error: 50872.9327\n",
      "\n",
      "Epoch: 36: 100%|##########| 1000/1000 [00:01<00:00, 989.87it/s]\n",
      "Train error: 50875.2124\n",
      "\n",
      "Epoch: 37: 100%|##########| 1000/1000 [00:01<00:00, 987.47it/s]\n",
      "Train error: 50851.1533\n",
      "\n",
      "Epoch: 38: 100%|##########| 1000/1000 [00:01<00:00, 966.68it/s]\n",
      "Train error: 50860.7261\n",
      "\n",
      "Epoch: 39: 100%|##########| 1000/1000 [00:01<00:00, 940.87it/s]\n",
      "Train error: 50856.0671\n",
      "\n",
      "Epoch: 40: 100%|##########| 1000/1000 [00:01<00:00, 975.10it/s]\n",
      "Train error: 50863.4863\n",
      "\n",
      "Epoch: 41: 100%|##########| 1000/1000 [00:01<00:00, 931.33it/s]\n",
      "Train error: 50862.5931\n",
      "\n",
      "Epoch: 42: 100%|##########| 1000/1000 [00:01<00:00, 897.54it/s]\n",
      "Train error: 50846.0341\n",
      "\n",
      "Epoch: 43: 100%|##########| 1000/1000 [00:01<00:00, 938.82it/s]\n",
      "Train error: 50854.1887\n",
      "\n",
      "Epoch: 44: 100%|##########| 1000/1000 [00:01<00:00, 944.81it/s]\n",
      "Train error: 50848.4981\n",
      "\n",
      "Epoch: 45: 100%|##########| 1000/1000 [00:01<00:00, 943.06it/s]\n",
      "Train error: 50832.2308\n",
      "\n",
      "Epoch: 46: 100%|##########| 1000/1000 [00:01<00:00, 937.61it/s]\n",
      "Train error: 50831.6260\n",
      "\n",
      "Epoch: 47: 100%|##########| 1000/1000 [00:01<00:00, 946.81it/s]\n",
      "Train error: 50829.6264\n",
      "\n",
      "Epoch: 48: 100%|##########| 1000/1000 [00:01<00:00, 951.26it/s]\n",
      "Train error: 50823.1038\n",
      "\n",
      "Epoch: 49: 100%|##########| 1000/1000 [00:01<00:00, 942.26it/s]\n",
      "Train error: 50819.0044\n",
      "\n",
      "Epoch: 50: 100%|##########| 1000/1000 [00:01<00:00, 965.92it/s]\n",
      "Train error: 50812.4263\n",
      "\n",
      "Epoch: 51: 100%|##########| 1000/1000 [00:01<00:00, 937.84it/s]\n",
      "Train error: 50820.7145\n",
      "\n",
      "Epoch: 52: 100%|##########| 1000/1000 [00:01<00:00, 889.04it/s]\n",
      "Train error: 50807.4009\n",
      "\n",
      "Epoch: 53: 100%|##########| 1000/1000 [00:01<00:00, 937.00it/s]\n",
      "Train error: 50805.3712\n",
      "\n",
      "Epoch: 54: 100%|##########| 1000/1000 [00:01<00:00, 871.26it/s]\n",
      "Train error: 50796.5754\n",
      "\n",
      "Epoch: 55: 100%|##########| 1000/1000 [00:01<00:00, 946.79it/s]\n",
      "Train error: 50787.2819\n",
      "\n",
      "Epoch: 56: 100%|##########| 1000/1000 [00:01<00:00, 928.32it/s]\n",
      "Train error: 50790.2431\n",
      "\n",
      "Epoch: 57: 100%|##########| 1000/1000 [00:01<00:00, 945.85it/s]\n",
      "Train error: 50782.4442\n",
      "\n",
      "Epoch: 58: 100%|##########| 1000/1000 [00:01<00:00, 939.78it/s]\n",
      "Train error: 50794.1017\n",
      "\n",
      "Epoch: 59: 100%|##########| 1000/1000 [00:01<00:00, 920.06it/s]\n",
      "Train error: 50782.8339\n",
      "\n",
      "Epoch: 60: 100%|##########| 1000/1000 [00:01<00:00, 938.73it/s]\n",
      "Train error: 50787.9271\n",
      "\n",
      "Epoch: 61: 100%|##########| 1000/1000 [00:01<00:00, 944.85it/s]\n",
      "Train error: 50782.6080\n",
      "\n",
      "Epoch: 62: 100%|##########| 1000/1000 [00:01<00:00, 937.58it/s]\n",
      "Train error: 50780.2180\n",
      "\n",
      "Epoch: 63: 100%|##########| 1000/1000 [00:01<00:00, 956.34it/s]\n",
      "Train error: 50765.0846\n",
      "\n",
      "Epoch: 64: 100%|##########| 1000/1000 [00:01<00:00, 942.62it/s]\n",
      "Train error: 50779.0129\n",
      "\n",
      "Epoch: 65: 100%|##########| 1000/1000 [00:01<00:00, 951.88it/s]\n",
      "Train error: 50768.6757\n",
      "\n",
      "Epoch: 66: 100%|##########| 1000/1000 [00:01<00:00, 953.96it/s]\n",
      "Train error: 50760.7312\n",
      "\n",
      "Epoch: 67: 100%|##########| 1000/1000 [00:01<00:00, 945.67it/s]\n",
      "Train error: 50773.5507\n",
      "\n",
      "Epoch: 68: 100%|##########| 1000/1000 [00:01<00:00, 960.94it/s]\n",
      "Train error: 50767.3379\n",
      "\n",
      "Epoch: 69: 100%|##########| 1000/1000 [00:01<00:00, 957.04it/s]\n",
      "Train error: 50754.8790\n",
      "\n",
      "Epoch: 70: 100%|##########| 1000/1000 [00:01<00:00, 947.74it/s]\n",
      "Train error: 50752.0387\n",
      "\n",
      "Epoch: 71: 100%|##########| 1000/1000 [00:01<00:00, 931.27it/s]\n",
      "Train error: 50746.3958\n",
      "\n",
      "Epoch: 72: 100%|##########| 1000/1000 [00:01<00:00, 957.18it/s]\n",
      "Train error: 50740.9881\n",
      "\n",
      "Epoch: 73: 100%|##########| 1000/1000 [00:01<00:00, 953.62it/s]\n",
      "Train error: 50725.5637\n",
      "\n",
      "Epoch: 74: 100%|##########| 1000/1000 [00:01<00:00, 942.07it/s]\n",
      "Train error: 50735.5194\n",
      "\n",
      "Epoch: 75: 100%|##########| 1000/1000 [00:01<00:00, 982.65it/s]\n",
      "Train error: 50739.0159\n",
      "\n",
      "Epoch: 76: 100%|##########| 1000/1000 [00:00<00:00, 1035.35it/s]\n",
      "Train error: 50717.5403\n",
      "\n",
      "Epoch: 77: 100%|##########| 1000/1000 [00:01<00:00, 947.73it/s]\n",
      "Train error: 50722.1257\n",
      "\n",
      "Epoch: 78: 100%|##########| 1000/1000 [00:01<00:00, 961.71it/s]\n",
      "Train error: 50713.9906\n",
      "\n",
      "Epoch: 79: 100%|##########| 1000/1000 [00:01<00:00, 945.56it/s]\n",
      "Train error: 50716.5700\n",
      "\n",
      "Epoch: 80: 100%|##########| 1000/1000 [00:01<00:00, 965.14it/s]\n",
      "Train error: 50704.2518\n",
      "\n",
      "Epoch: 81: 100%|##########| 1000/1000 [00:01<00:00, 957.99it/s]\n",
      "Train error: 50701.4091\n",
      "\n",
      "Epoch: 82: 100%|##########| 1000/1000 [00:01<00:00, 954.75it/s]\n",
      "Train error: 50701.5987\n",
      "\n",
      "Epoch: 83: 100%|##########| 1000/1000 [00:01<00:00, 978.62it/s]\n",
      "Train error: 50684.1560\n",
      "\n",
      "Epoch: 84: 100%|##########| 1000/1000 [00:01<00:00, 962.28it/s]\n",
      "Train error: 50684.8012\n",
      "\n",
      "Epoch: 85: 100%|##########| 1000/1000 [00:01<00:00, 930.64it/s]\n",
      "Train error: 50685.7737\n",
      "\n",
      "Epoch: 86: 100%|##########| 1000/1000 [00:01<00:00, 967.22it/s]\n",
      "Train error: 50666.0574\n",
      "\n",
      "Epoch: 87: 100%|##########| 1000/1000 [00:01<00:00, 956.03it/s]\n",
      "Train error: 50667.6623\n",
      "\n",
      "Epoch: 88: 100%|##########| 1000/1000 [00:01<00:00, 975.41it/s]\n",
      "Train error: 50665.6288\n",
      "\n",
      "Epoch: 89: 100%|##########| 1000/1000 [00:01<00:00, 968.93it/s]\n",
      "Train error: 50655.4500\n",
      "\n",
      "Epoch: 90: 100%|##########| 1000/1000 [00:01<00:00, 941.25it/s]\n",
      "Train error: 50653.7838\n",
      "\n",
      "Epoch: 91: 100%|##########| 1000/1000 [00:01<00:00, 966.67it/s]\n",
      "Train error: 50652.2329\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 92: 100%|##########| 1000/1000 [00:01<00:00, 914.86it/s]\n",
      "Train error: 50637.6569\n",
      "\n",
      "Epoch: 93: 100%|##########| 1000/1000 [00:01<00:00, 880.86it/s]\n",
      "Train error: 50634.7681\n",
      "\n",
      "Epoch: 94: 100%|##########| 1000/1000 [00:01<00:00, 869.59it/s]\n",
      "Train error: 50621.1525\n",
      "\n",
      "Epoch: 95: 100%|##########| 1000/1000 [00:01<00:00, 889.52it/s]\n",
      "Train error: 50630.2748\n",
      "\n",
      "Epoch: 96: 100%|##########| 1000/1000 [00:01<00:00, 901.53it/s]\n",
      "Train error: 50624.4656\n",
      "\n",
      "Epoch: 97: 100%|##########| 1000/1000 [00:01<00:00, 891.97it/s]\n",
      "Train error: 50618.5784\n",
      "\n",
      "Epoch: 98: 100%|##########| 1000/1000 [00:01<00:00, 881.60it/s]\n",
      "Train error: 50615.7141\n",
      "\n",
      "Epoch: 99: 100%|##########| 1000/1000 [00:01<00:00, 885.07it/s]\n",
      "Train error: 50607.3074\n",
      "\n",
      "Epoch: 100: 100%|##########| 1000/1000 [00:01<00:00, 920.98it/s]\n",
      "Train error: 50610.1278\n",
      "\n",
      "Epoch: 101: 100%|##########| 1000/1000 [00:01<00:00, 906.21it/s]\n",
      "Train error: 50601.5292\n",
      "\n",
      "Epoch: 102: 100%|##########| 1000/1000 [00:01<00:00, 911.10it/s]\n",
      "Train error: 50595.0446\n",
      "\n",
      "Epoch: 103: 100%|##########| 1000/1000 [00:01<00:00, 911.36it/s]\n",
      "Train error: 50584.0605\n",
      "\n",
      "Epoch: 104: 100%|##########| 1000/1000 [00:01<00:00, 916.26it/s]\n",
      "Train error: 50601.8629\n",
      "\n",
      "Epoch: 105: 100%|##########| 1000/1000 [00:01<00:00, 905.45it/s]\n",
      "Train error: 50586.7441\n",
      "\n",
      "Epoch: 106: 100%|##########| 1000/1000 [00:01<00:00, 888.65it/s]\n",
      "Train error: 50583.6094\n",
      "\n",
      "Epoch: 107: 100%|##########| 1000/1000 [00:01<00:00, 926.78it/s]\n",
      "Train error: 50579.7583\n",
      "\n",
      "Epoch: 108: 100%|##########| 1000/1000 [00:01<00:00, 902.95it/s]\n",
      "Train error: 50567.0004\n",
      "\n",
      "Epoch: 109: 100%|##########| 1000/1000 [00:01<00:00, 941.54it/s]\n",
      "Train error: 50555.5815\n",
      "\n",
      "Epoch: 110: 100%|##########| 1000/1000 [00:01<00:00, 957.54it/s]\n",
      "Train error: 50558.5329\n",
      "\n",
      "Epoch: 111: 100%|##########| 1000/1000 [00:01<00:00, 893.24it/s]\n",
      "Train error: 50549.4835\n",
      "\n",
      "Epoch: 112: 100%|##########| 1000/1000 [00:01<00:00, 932.17it/s]\n",
      "Train error: 50551.6473\n",
      "\n",
      "Epoch: 113: 100%|##########| 1000/1000 [00:01<00:00, 896.53it/s]\n",
      "Train error: 50558.2462\n",
      "\n",
      "Epoch: 114: 100%|##########| 1000/1000 [00:01<00:00, 938.77it/s]\n",
      "Train error: 50550.3087\n",
      "\n",
      "Epoch: 115: 100%|##########| 1000/1000 [00:01<00:00, 898.57it/s]\n",
      "Train error: 50537.4355\n",
      "\n",
      "Epoch: 116: 100%|##########| 1000/1000 [00:01<00:00, 938.32it/s]\n",
      "Train error: 50543.6840\n",
      "\n",
      "Epoch: 117: 100%|##########| 1000/1000 [00:01<00:00, 897.60it/s]\n",
      "Train error: 50540.3161\n",
      "\n",
      "Epoch: 118: 100%|##########| 1000/1000 [00:01<00:00, 926.49it/s]\n",
      "Train error: 50534.1202\n",
      "\n",
      "Epoch: 119: 100%|##########| 1000/1000 [00:01<00:00, 943.74it/s]\n",
      "Train error: 50520.3758\n",
      "\n",
      "Epoch: 120: 100%|##########| 1000/1000 [00:01<00:00, 901.37it/s]\n",
      "Train error: 50526.4113\n",
      "\n",
      "Epoch: 121: 100%|##########| 1000/1000 [00:01<00:00, 928.68it/s]\n",
      "Train error: 50509.5306\n",
      "\n",
      "Epoch: 122: 100%|##########| 1000/1000 [00:01<00:00, 923.20it/s]\n",
      "Train error: 50512.6927\n",
      "\n",
      "Epoch: 123: 100%|##########| 1000/1000 [00:01<00:00, 889.73it/s]\n",
      "Train error: 50507.5724\n",
      "\n",
      "Epoch: 124: 100%|##########| 1000/1000 [00:01<00:00, 923.91it/s]\n",
      "Train error: 50496.1901\n",
      "\n",
      "Epoch: 125: 100%|##########| 1000/1000 [00:01<00:00, 919.10it/s]\n",
      "Train error: 50488.0885\n",
      "\n",
      "Epoch: 126: 100%|##########| 1000/1000 [00:01<00:00, 912.56it/s]\n",
      "Train error: 50478.8376\n",
      "\n",
      "Epoch: 127: 100%|##########| 1000/1000 [00:01<00:00, 906.86it/s]\n",
      "Train error: 50485.8027\n",
      "\n",
      "Epoch: 128: 100%|##########| 1000/1000 [00:01<00:00, 923.84it/s]\n",
      "Train error: 50466.1172\n",
      "\n",
      "Epoch: 129: 100%|##########| 1000/1000 [00:01<00:00, 955.75it/s]\n",
      "Train error: 50474.6348\n",
      "\n",
      "Epoch: 130: 100%|##########| 1000/1000 [00:01<00:00, 896.27it/s]\n",
      "Train error: 50468.8225\n",
      "\n",
      "Epoch: 131: 100%|##########| 1000/1000 [00:01<00:00, 911.30it/s]\n",
      "Train error: 50466.1335\n",
      "\n",
      "Epoch: 132: 100%|##########| 1000/1000 [00:01<00:00, 920.50it/s]\n",
      "Train error: 50452.8637\n",
      "\n",
      "Epoch: 133: 100%|##########| 1000/1000 [00:01<00:00, 938.85it/s]\n",
      "Train error: 50443.1155\n",
      "\n",
      "Epoch: 134: 100%|##########| 1000/1000 [00:01<00:00, 935.13it/s]\n",
      "Train error: 50451.9945\n",
      "\n",
      "Epoch: 135: 100%|##########| 1000/1000 [00:01<00:00, 951.52it/s]\n",
      "Train error: 50440.4016\n",
      "\n",
      "Epoch: 136: 100%|##########| 1000/1000 [00:01<00:00, 997.77it/s]\n",
      "Train error: 50422.6698\n",
      "\n",
      "Epoch: 137: 100%|##########| 1000/1000 [00:01<00:00, 923.57it/s]\n",
      "Train error: 50417.4837\n",
      "\n",
      "Epoch: 138: 100%|##########| 1000/1000 [00:01<00:00, 914.64it/s]\n",
      "Train error: 50410.5933\n",
      "\n",
      "Epoch: 139: 100%|##########| 1000/1000 [00:01<00:00, 923.41it/s]\n",
      "Train error: 50405.3451\n",
      "\n",
      "Epoch: 140: 100%|##########| 1000/1000 [00:01<00:00, 956.30it/s]\n",
      "Train error: 50408.5837\n",
      "\n",
      "Epoch: 141: 100%|##########| 1000/1000 [00:01<00:00, 938.68it/s]\n",
      "Train error: 50398.9795\n",
      "\n",
      "Epoch: 142: 100%|##########| 1000/1000 [00:01<00:00, 941.04it/s]\n",
      "Train error: 50398.3463\n",
      "\n",
      "Epoch: 143: 100%|##########| 1000/1000 [00:01<00:00, 966.94it/s]\n",
      "Train error: 50393.3056\n",
      "\n",
      "Epoch: 144: 100%|##########| 1000/1000 [00:01<00:00, 926.50it/s]\n",
      "Train error: 50375.4547\n",
      "\n",
      "Epoch: 145: 100%|##########| 1000/1000 [00:01<00:00, 947.05it/s]\n",
      "Train error: 50385.1892\n",
      "\n",
      "Epoch: 146: 100%|##########| 1000/1000 [00:01<00:00, 917.32it/s]\n",
      "Train error: 50370.5977\n",
      "\n",
      "Epoch: 147: 100%|##########| 1000/1000 [00:01<00:00, 973.59it/s]\n",
      "Train error: 50366.3166\n",
      "\n",
      "Epoch: 148: 100%|##########| 1000/1000 [00:01<00:00, 987.53it/s]\n",
      "Train error: 50354.7648\n",
      "\n",
      "Epoch: 149: 100%|##########| 1000/1000 [00:01<00:00, 923.42it/s]\n",
      "Train error: 50355.2418\n",
      "\n",
      "Epoch: 150: 100%|##########| 1000/1000 [00:01<00:00, 932.38it/s]\n",
      "Train error: 50341.7507\n",
      "\n",
      "Epoch: 151: 100%|##########| 1000/1000 [00:01<00:00, 946.48it/s]\n",
      "Train error: 50336.5838\n",
      "\n",
      "Epoch: 152: 100%|##########| 1000/1000 [00:01<00:00, 999.11it/s]\n",
      "Train error: 50337.2751\n",
      "\n",
      "Epoch: 153: 100%|##########| 1000/1000 [00:01<00:00, 957.94it/s]\n",
      "Train error: 50321.5766\n",
      "\n",
      "Epoch: 154: 100%|##########| 1000/1000 [00:01<00:00, 918.04it/s]\n",
      "Train error: 50315.0435\n",
      "\n",
      "Epoch: 155: 100%|##########| 1000/1000 [00:01<00:00, 939.64it/s]\n",
      "Train error: 50318.1042\n",
      "\n",
      "Epoch: 156: 100%|##########| 1000/1000 [00:01<00:00, 893.75it/s]\n",
      "Train error: 50311.2807\n",
      "\n",
      "Epoch: 157: 100%|##########| 1000/1000 [00:01<00:00, 934.57it/s]\n",
      "Train error: 50292.4789\n",
      "\n",
      "Epoch: 158: 100%|##########| 1000/1000 [00:01<00:00, 941.16it/s]\n",
      "Train error: 50300.0022\n",
      "\n",
      "Epoch: 159: 100%|##########| 1000/1000 [00:01<00:00, 917.95it/s]\n",
      "Train error: 50292.2908\n",
      "\n",
      "Epoch: 160: 100%|##########| 1000/1000 [00:01<00:00, 963.18it/s]\n",
      "Train error: 50271.5465\n",
      "\n",
      "Epoch: 161: 100%|##########| 1000/1000 [00:01<00:00, 911.68it/s]\n",
      "Train error: 50277.1758\n",
      "\n",
      "Epoch: 162: 100%|##########| 1000/1000 [00:01<00:00, 989.58it/s]\n",
      "Train error: 50266.1809\n",
      "\n",
      "Epoch: 163: 100%|##########| 1000/1000 [00:01<00:00, 928.03it/s]\n",
      "Train error: 50258.5412\n",
      "\n",
      "Epoch: 164: 100%|##########| 1000/1000 [00:00<00:00, 1011.47it/s]\n",
      "Train error: 50262.2434\n",
      "\n",
      "Epoch: 165: 100%|##########| 1000/1000 [00:01<00:00, 987.45it/s]\n",
      "Train error: 50256.9174\n",
      "\n",
      "Epoch: 166: 100%|##########| 1000/1000 [00:01<00:00, 914.12it/s]\n",
      "Train error: 50250.6071\n",
      "\n",
      "Epoch: 167: 100%|##########| 1000/1000 [00:01<00:00, 954.24it/s]\n",
      "Train error: 50243.4271\n",
      "\n",
      "Epoch: 168: 100%|##########| 1000/1000 [00:01<00:00, 900.22it/s]\n",
      "Train error: 50239.6410\n",
      "\n",
      "Epoch: 169: 100%|##########| 1000/1000 [00:01<00:00, 926.13it/s]\n",
      "Train error: 50237.2860\n",
      "\n",
      "Epoch: 170: 100%|##########| 1000/1000 [00:01<00:00, 947.67it/s]\n",
      "Train error: 50221.9341\n",
      "\n",
      "Epoch: 171: 100%|##########| 1000/1000 [00:01<00:00, 984.62it/s]\n",
      "Train error: 50221.3512\n",
      "\n",
      "Epoch: 172: 100%|##########| 1000/1000 [00:01<00:00, 970.86it/s]\n",
      "Train error: 50216.0481\n",
      "\n",
      "Epoch: 173: 100%|##########| 1000/1000 [00:01<00:00, 941.37it/s]\n",
      "Train error: 50208.4118\n",
      "\n",
      "Epoch: 174: 100%|##########| 1000/1000 [00:01<00:00, 970.17it/s]\n",
      "Train error: 50196.6142\n",
      "\n",
      "Epoch: 175: 100%|##########| 1000/1000 [00:01<00:00, 943.35it/s]\n",
      "Train error: 50197.4324\n",
      "\n",
      "Epoch: 176: 100%|##########| 1000/1000 [00:01<00:00, 940.42it/s]\n",
      "Train error: 50191.3152\n",
      "\n",
      "Epoch: 177: 100%|##########| 1000/1000 [00:01<00:00, 930.25it/s]\n",
      "Train error: 50184.7450\n",
      "\n",
      "Epoch: 178: 100%|##########| 1000/1000 [00:01<00:00, 944.85it/s]\n",
      "Train error: 50185.2586\n",
      "\n",
      "Epoch: 179: 100%|##########| 1000/1000 [00:01<00:00, 937.80it/s]\n",
      "Train error: 50173.7723\n",
      "\n",
      "Epoch: 180: 100%|##########| 1000/1000 [00:01<00:00, 923.49it/s]\n",
      "Train error: 50166.0961\n",
      "\n",
      "Epoch: 181: 100%|##########| 1000/1000 [00:01<00:00, 908.48it/s]\n",
      "Train error: 50166.5155\n",
      "\n",
      "Epoch: 182: 100%|##########| 1000/1000 [00:01<00:00, 849.06it/s]\n",
      "Train error: 50160.8675\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 183: 100%|##########| 1000/1000 [00:01<00:00, 783.54it/s]\n",
      "Train error: 50165.5431\n",
      "\n",
      "Epoch: 184: 100%|##########| 1000/1000 [00:01<00:00, 928.99it/s]\n",
      "Train error: 50159.7606\n",
      "\n",
      "Epoch: 185: 100%|##########| 1000/1000 [00:01<00:00, 973.61it/s]\n",
      "Train error: 50153.5935\n",
      "\n",
      "Epoch: 186: 100%|##########| 1000/1000 [00:01<00:00, 954.26it/s]\n",
      "Train error: 50150.5624\n",
      "\n",
      "Epoch: 187: 100%|##########| 1000/1000 [00:01<00:00, 956.76it/s]\n",
      "Train error: 50134.9849\n",
      "\n",
      "Epoch: 188: 100%|##########| 1000/1000 [00:01<00:00, 986.07it/s]\n",
      "Train error: 50136.2115\n",
      "\n",
      "Epoch: 189: 100%|##########| 1000/1000 [00:01<00:00, 952.20it/s]\n",
      "Train error: 50131.9921\n",
      "\n",
      "Epoch: 190: 100%|##########| 1000/1000 [00:01<00:00, 947.48it/s]\n",
      "Train error: 50123.1078\n",
      "\n",
      "Epoch: 191: 100%|##########| 1000/1000 [00:01<00:00, 920.91it/s]\n",
      "Train error: 50114.0724\n",
      "\n",
      "Epoch: 192: 100%|##########| 1000/1000 [00:01<00:00, 948.99it/s]\n",
      "Train error: 50114.2372\n",
      "\n",
      "Epoch: 193: 100%|##########| 1000/1000 [00:01<00:00, 973.21it/s]\n",
      "Train error: 50110.0735\n",
      "\n",
      "Epoch: 194: 100%|##########| 1000/1000 [00:01<00:00, 950.35it/s]\n",
      "Train error: 50098.9296\n",
      "\n",
      "Epoch: 195: 100%|##########| 1000/1000 [00:01<00:00, 972.30it/s]\n",
      "Train error: 50099.6530\n",
      "\n",
      "Epoch: 196: 100%|##########| 1000/1000 [00:01<00:00, 997.30it/s]\n",
      "Train error: 50094.7693\n",
      "\n",
      "Epoch: 197: 100%|##########| 1000/1000 [00:01<00:00, 924.75it/s]\n",
      "Train error: 50084.1024\n",
      "\n",
      "Epoch: 198: 100%|##########| 1000/1000 [00:01<00:00, 963.92it/s]\n",
      "Train error: 50079.0523\n",
      "\n",
      "Epoch: 199: 100%|##########| 1000/1000 [00:01<00:00, 966.33it/s]\n",
      "Train error: 50072.9172\n",
      "\n",
      "Epoch: 200: 100%|##########| 1000/1000 [00:01<00:00, 950.91it/s]\n",
      "Train error: 50061.9747\n",
      "\n",
      "Epoch: 201: 100%|##########| 1000/1000 [00:01<00:00, 935.52it/s]\n",
      "Train error: 50066.1848\n",
      "\n",
      "Epoch: 202: 100%|##########| 1000/1000 [00:01<00:00, 935.27it/s]\n",
      "Train error: 50054.7613\n",
      "\n",
      "Epoch: 203: 100%|##########| 1000/1000 [00:01<00:00, 913.82it/s]\n",
      "Train error: 50058.2454\n",
      "\n",
      "Epoch: 204: 100%|##########| 1000/1000 [00:01<00:00, 940.49it/s]\n",
      "Train error: 50042.0300\n",
      "\n",
      "Epoch: 205: 100%|##########| 1000/1000 [00:01<00:00, 946.84it/s]\n",
      "Train error: 50046.0537\n",
      "\n",
      "Epoch: 206: 100%|##########| 1000/1000 [00:01<00:00, 978.19it/s]\n",
      "Train error: 50040.6571\n",
      "\n",
      "Epoch: 207: 100%|##########| 1000/1000 [00:01<00:00, 965.08it/s]\n",
      "Train error: 50038.1450\n",
      "\n",
      "Epoch: 208: 100%|##########| 1000/1000 [00:01<00:00, 924.88it/s]\n",
      "Train error: 50024.4051\n",
      "\n",
      "Epoch: 209: 100%|##########| 1000/1000 [00:01<00:00, 936.76it/s]\n",
      "Train error: 50021.7501\n",
      "\n",
      "Epoch: 210: 100%|##########| 1000/1000 [00:01<00:00, 941.01it/s]\n",
      "Train error: 50023.9623\n",
      "\n",
      "Epoch: 211: 100%|##########| 1000/1000 [00:01<00:00, 991.31it/s]\n",
      "Train error: 50015.9841\n",
      "\n",
      "Epoch: 212: 100%|##########| 1000/1000 [00:01<00:00, 977.21it/s]\n",
      "Train error: 50002.1599\n",
      "\n",
      "Epoch: 213: 100%|##########| 1000/1000 [00:01<00:00, 963.24it/s]\n",
      "Train error: 49995.4107\n",
      "\n",
      "Epoch: 214: 100%|##########| 1000/1000 [00:01<00:00, 967.55it/s]\n",
      "Train error: 49988.2509\n",
      "\n",
      "Epoch: 215: 100%|##########| 1000/1000 [00:01<00:00, 979.83it/s]\n",
      "Train error: 49992.5911\n",
      "\n",
      "Epoch: 216: 100%|##########| 1000/1000 [00:01<00:00, 983.22it/s]\n",
      "Train error: 49973.5641\n",
      "\n",
      "Epoch: 217: 100%|##########| 1000/1000 [00:01<00:00, 954.44it/s]\n",
      "Train error: 49970.9664\n",
      "\n",
      "Epoch: 218: 100%|##########| 1000/1000 [00:01<00:00, 980.63it/s]\n",
      "Train error: 49967.1941\n",
      "\n",
      "Epoch: 219: 100%|##########| 1000/1000 [00:01<00:00, 982.61it/s]\n",
      "Train error: 49956.6364\n",
      "\n",
      "Epoch: 220: 100%|##########| 1000/1000 [00:01<00:00, 931.40it/s]\n",
      "Train error: 49958.4345\n",
      "\n",
      "Epoch: 221: 100%|##########| 1000/1000 [00:01<00:00, 949.17it/s]\n",
      "Train error: 49955.1620\n",
      "\n",
      "Epoch: 222: 100%|##########| 1000/1000 [00:01<00:00, 924.22it/s]\n",
      "Train error: 49942.7180\n",
      "\n",
      "Epoch: 223: 100%|##########| 1000/1000 [00:01<00:00, 939.11it/s]\n",
      "Train error: 49943.0970\n",
      "\n",
      "Epoch: 224: 100%|##########| 1000/1000 [00:01<00:00, 920.11it/s]\n",
      "Train error: 49940.7118\n",
      "\n",
      "Epoch: 225: 100%|##########| 1000/1000 [00:01<00:00, 952.21it/s]\n",
      "Train error: 49923.6985\n",
      "\n",
      "Epoch: 226: 100%|##########| 1000/1000 [00:01<00:00, 923.99it/s]\n",
      "Train error: 49934.0522\n",
      "\n",
      "Epoch: 227: 100%|##########| 1000/1000 [00:01<00:00, 922.49it/s]\n",
      "Train error: 49918.4236\n",
      "\n",
      "Epoch: 228: 100%|##########| 1000/1000 [00:01<00:00, 943.34it/s]\n",
      "Train error: 49935.3528\n",
      "\n",
      "Epoch: 229: 100%|##########| 1000/1000 [00:01<00:00, 933.42it/s]\n",
      "Train error: 49925.2305\n",
      "\n",
      "Epoch: 230: 100%|##########| 1000/1000 [00:01<00:00, 845.71it/s]\n",
      "Train error: 49916.3578\n",
      "\n",
      "Epoch: 231: 100%|##########| 1000/1000 [00:01<00:00, 928.45it/s]\n",
      "Train error: 49909.0885\n",
      "\n",
      "Epoch: 232: 100%|##########| 1000/1000 [00:01<00:00, 812.63it/s]\n",
      "Train error: 49912.3210\n",
      "\n",
      "Epoch: 233: 100%|##########| 1000/1000 [00:01<00:00, 928.56it/s]\n",
      "Train error: 49900.8634\n",
      "\n",
      "Epoch: 234: 100%|##########| 1000/1000 [00:01<00:00, 878.68it/s]\n",
      "Train error: 49898.3064\n",
      "\n",
      "Epoch: 235: 100%|##########| 1000/1000 [00:01<00:00, 825.97it/s]\n",
      "Train error: 49892.5675\n",
      "\n",
      "Epoch: 236: 100%|##########| 1000/1000 [00:01<00:00, 972.44it/s]\n",
      "Train error: 49893.9727\n",
      "\n",
      "Epoch: 237: 100%|##########| 1000/1000 [00:01<00:00, 893.34it/s]\n",
      "Train error: 49890.3906\n",
      "\n",
      "Epoch: 238: 100%|##########| 1000/1000 [00:01<00:00, 896.31it/s]\n",
      "Train error: 49886.5368\n",
      "\n",
      "Epoch: 239: 100%|##########| 1000/1000 [00:01<00:00, 873.87it/s]\n",
      "Train error: 49890.0420\n",
      "\n",
      "Epoch: 240: 100%|##########| 1000/1000 [00:01<00:00, 882.95it/s]\n",
      "Train error: 49882.3156\n",
      "\n",
      "Epoch: 241: 100%|##########| 1000/1000 [00:01<00:00, 882.04it/s]\n",
      "Train error: 49869.5429\n",
      "\n",
      "Epoch: 242: 100%|##########| 1000/1000 [00:01<00:00, 810.13it/s]\n",
      "Train error: 49870.7631\n",
      "\n",
      "Epoch: 243: 100%|##########| 1000/1000 [00:01<00:00, 882.35it/s]\n",
      "Train error: 49869.9332\n",
      "\n",
      "Epoch: 244: 100%|##########| 1000/1000 [00:01<00:00, 864.15it/s]\n",
      "Train error: 49869.7737\n",
      "\n",
      "Epoch: 245: 100%|##########| 1000/1000 [00:01<00:00, 817.74it/s]\n",
      "Train error: 49872.0248\n",
      "\n",
      "Epoch: 246: 100%|##########| 1000/1000 [00:01<00:00, 848.20it/s]\n",
      "Train error: 49857.9598\n",
      "\n",
      "Epoch: 247: 100%|##########| 1000/1000 [00:01<00:00, 817.22it/s]\n",
      "Train error: 49860.9832\n",
      "\n",
      "Epoch: 248: 100%|##########| 1000/1000 [00:01<00:00, 839.88it/s]\n",
      "Train error: 49848.3133\n",
      "\n",
      "Epoch: 249: 100%|##########| 1000/1000 [00:01<00:00, 840.30it/s]\n",
      "Train error: 49853.8971\n",
      "\n",
      "Epoch: 250: 100%|##########| 1000/1000 [00:01<00:00, 806.98it/s]\n",
      "Train error: 49853.4483\n",
      "\n",
      "Epoch: 251: 100%|##########| 1000/1000 [00:01<00:00, 840.82it/s]\n",
      "Train error: 49841.6084\n",
      "\n",
      "Epoch: 252: 100%|##########| 1000/1000 [00:01<00:00, 912.29it/s]\n",
      "Train error: 49846.9034\n",
      "\n",
      "Epoch: 253: 100%|##########| 1000/1000 [00:01<00:00, 807.29it/s]\n",
      "Train error: 49838.1548\n",
      "\n",
      "Epoch: 254: 100%|##########| 1000/1000 [00:01<00:00, 829.82it/s]\n",
      "Train error: 49837.5094\n",
      "\n",
      "Epoch: 255: 100%|##########| 1000/1000 [00:01<00:00, 807.30it/s]\n",
      "Train error: 49840.5820\n",
      "\n",
      "Epoch: 256: 100%|##########| 1000/1000 [00:01<00:00, 796.29it/s]\n",
      "Train error: 49836.0779\n",
      "\n",
      "Epoch: 257: 100%|##########| 1000/1000 [00:01<00:00, 818.98it/s]\n",
      "Train error: 49819.4148\n",
      "\n",
      "Epoch: 258: 100%|##########| 1000/1000 [00:01<00:00, 820.83it/s]\n",
      "Train error: 49833.6569\n",
      "\n",
      "Epoch: 259: 100%|##########| 1000/1000 [00:01<00:00, 848.44it/s]\n",
      "Train error: 49817.7291\n",
      "\n",
      "Epoch: 260: 100%|##########| 1000/1000 [00:01<00:00, 930.15it/s]\n",
      "Train error: 49818.5081\n",
      "\n",
      "Epoch: 261: 100%|##########| 1000/1000 [00:01<00:00, 914.49it/s]\n",
      "Train error: 49819.7624\n",
      "\n",
      "Epoch: 262: 100%|##########| 1000/1000 [00:01<00:00, 846.04it/s]\n",
      "Train error: 49818.1402\n",
      "\n",
      "Epoch: 263: 100%|##########| 1000/1000 [00:01<00:00, 858.69it/s]\n",
      "Train error: 49823.1061\n",
      "\n",
      "Epoch: 264: 100%|##########| 1000/1000 [00:01<00:00, 916.88it/s]\n",
      "Train error: 49814.3459\n",
      "\n",
      "Epoch: 265: 100%|##########| 1000/1000 [00:01<00:00, 880.39it/s]\n",
      "Train error: 49809.3269\n",
      "\n",
      "Epoch: 266: 100%|##########| 1000/1000 [00:01<00:00, 838.76it/s]\n",
      "Train error: 49810.6414\n",
      "\n",
      "Epoch: 267: 100%|##########| 1000/1000 [00:01<00:00, 865.59it/s]\n",
      "Train error: 49802.1824\n",
      "\n",
      "Epoch: 268: 100%|##########| 1000/1000 [00:01<00:00, 873.80it/s]\n",
      "Train error: 49803.2789\n",
      "\n",
      "Epoch: 269: 100%|##########| 1000/1000 [00:01<00:00, 894.58it/s]\n",
      "Train error: 49804.8981\n",
      "\n",
      "Epoch: 270: 100%|##########| 1000/1000 [00:01<00:00, 880.60it/s]\n",
      "Train error: 49802.6581\n",
      "\n",
      "Epoch: 271: 100%|##########| 1000/1000 [00:01<00:00, 969.82it/s]\n",
      "Train error: 49797.1380\n",
      "\n",
      "Epoch: 272: 100%|##########| 1000/1000 [00:01<00:00, 919.12it/s]\n",
      "Train error: 49798.7186\n",
      "\n",
      "Epoch: 273: 100%|##########| 1000/1000 [00:01<00:00, 942.13it/s]\n",
      "Train error: 49784.2602\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 274: 100%|##########| 1000/1000 [00:01<00:00, 940.93it/s]\n",
      "Train error: 49790.1189\n",
      "\n",
      "Epoch: 275: 100%|##########| 1000/1000 [00:01<00:00, 936.71it/s]\n",
      "Train error: 49789.9514\n",
      "\n",
      "Epoch: 276: 100%|##########| 1000/1000 [00:01<00:00, 908.09it/s]\n",
      "Train error: 49780.7086\n",
      "\n",
      "Epoch: 277: 100%|##########| 1000/1000 [00:01<00:00, 916.78it/s]\n",
      "Train error: 49786.9202\n",
      "\n",
      "Epoch: 278: 100%|##########| 1000/1000 [00:01<00:00, 870.51it/s]\n",
      "Train error: 49776.6281\n",
      "\n",
      "Epoch: 279: 100%|##########| 1000/1000 [00:01<00:00, 901.56it/s]\n",
      "Train error: 49775.4741\n",
      "\n",
      "Epoch: 280: 100%|##########| 1000/1000 [00:01<00:00, 929.46it/s]\n",
      "Train error: 49779.6139\n",
      "\n",
      "Epoch: 281: 100%|##########| 1000/1000 [00:01<00:00, 918.88it/s]\n",
      "Train error: 49780.0812\n",
      "\n",
      "Epoch: 282: 100%|##########| 1000/1000 [00:01<00:00, 924.44it/s]\n",
      "Train error: 49782.4408\n",
      "\n",
      "Epoch: 283: 100%|##########| 1000/1000 [00:01<00:00, 911.57it/s]\n",
      "Train error: 49775.6704\n",
      "\n",
      "Epoch: 284: 100%|##########| 1000/1000 [00:01<00:00, 938.85it/s]\n",
      "Train error: 49778.3476\n",
      "\n",
      "Epoch: 285: 100%|##########| 1000/1000 [00:01<00:00, 924.84it/s]\n",
      "Train error: 49775.0208\n",
      "\n",
      "Epoch: 286: 100%|##########| 1000/1000 [00:01<00:00, 926.25it/s]\n",
      "Train error: 49767.2020\n",
      "\n",
      "Epoch: 287: 100%|##########| 1000/1000 [00:01<00:00, 972.12it/s]\n",
      "Train error: 49760.7238\n",
      "\n",
      "Epoch: 288: 100%|##########| 1000/1000 [00:01<00:00, 923.93it/s]\n",
      "Train error: 49763.1710\n",
      "\n",
      "Epoch: 289: 100%|##########| 1000/1000 [00:01<00:00, 900.03it/s]\n",
      "Train error: 49763.5914\n",
      "\n",
      "Epoch: 290: 100%|##########| 1000/1000 [00:01<00:00, 909.18it/s]\n",
      "Train error: 49755.6837\n",
      "\n",
      "Epoch: 291: 100%|##########| 1000/1000 [00:01<00:00, 979.74it/s]\n",
      "Train error: 49753.9048\n",
      "\n",
      "Epoch: 292: 100%|##########| 1000/1000 [00:01<00:00, 880.88it/s]\n",
      "Train error: 49764.0112\n",
      "\n",
      "Epoch: 293: 100%|##########| 1000/1000 [00:01<00:00, 948.29it/s]\n",
      "Train error: 49752.3724\n",
      "\n",
      "Epoch: 294: 100%|##########| 1000/1000 [00:01<00:00, 935.43it/s]\n",
      "Train error: 49755.6500\n",
      "\n",
      "Epoch: 295: 100%|##########| 1000/1000 [00:01<00:00, 924.03it/s]\n",
      "Train error: 49751.9443\n",
      "\n",
      "Epoch: 296: 100%|##########| 1000/1000 [00:01<00:00, 927.21it/s]\n",
      "Train error: 49750.0360\n",
      "\n",
      "Epoch: 297: 100%|##########| 1000/1000 [00:01<00:00, 998.10it/s]\n",
      "Train error: 49751.8149\n",
      "\n",
      "Epoch: 298: 100%|##########| 1000/1000 [00:01<00:00, 946.99it/s]\n",
      "Train error: 49751.7790\n",
      "\n",
      "Epoch: 299: 100%|##########| 1000/1000 [00:00<00:00, 1070.37it/s]\n",
      "Train error: 49746.4248\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from tfrbm import GBRBM\n",
    "\n",
    "gbrbm = GBRBM(n_visible=25, n_hidden=9, learning_rate=0.01, momentum=0.95, use_tqdm=True)\n",
    "errs = gbrbm.fit(red_data, n_epoches=300, batch_size=10)\n",
    "plt.plot(errs)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 0: 100%|##########| 500/500 [00:00<00:00, 978.42it/s] \n",
      "Train error: 49964.8102\n",
      "\n",
      "Epoch: 1: 100%|##########| 500/500 [00:00<00:00, 892.61it/s] \n",
      "Train error: 49941.1583\n",
      "\n",
      "Epoch: 2: 100%|##########| 500/500 [00:00<00:00, 915.26it/s] \n",
      "Train error: 49952.3114\n",
      "\n",
      "Epoch: 3: 100%|##########| 500/500 [00:00<00:00, 888.96it/s]\n",
      "Train error: 49947.4010\n",
      "\n",
      "Epoch: 4: 100%|##########| 500/500 [00:00<00:00, 903.88it/s]\n",
      "Train error: 49946.6324\n",
      "\n",
      "Epoch: 5: 100%|##########| 500/500 [00:00<00:00, 896.10it/s] \n",
      "Train error: 49950.0499\n",
      "\n",
      "Epoch: 6: 100%|##########| 500/500 [00:00<00:00, 882.13it/s]\n",
      "Train error: 49946.7229\n",
      "\n",
      "Epoch: 7: 100%|##########| 500/500 [00:00<00:00, 897.24it/s]\n",
      "Train error: 49936.7223\n",
      "\n",
      "Epoch: 8: 100%|##########| 500/500 [00:00<00:00, 885.09it/s]\n",
      "Train error: 49947.9158\n",
      "\n",
      "Epoch: 9: 100%|##########| 500/500 [00:00<00:00, 949.04it/s] \n",
      "Train error: 49941.4816\n",
      "\n",
      "Epoch: 10: 100%|##########| 500/500 [00:00<00:00, 890.99it/s] \n",
      "Train error: 49949.8646\n",
      "\n",
      "Epoch: 11: 100%|##########| 500/500 [00:00<00:00, 949.98it/s]\n",
      "Train error: 49946.3993\n",
      "\n",
      "Epoch: 12: 100%|##########| 500/500 [00:00<00:00, 952.42it/s] \n",
      "Train error: 49954.1782\n",
      "\n",
      "Epoch: 13: 100%|##########| 500/500 [00:00<00:00, 954.36it/s] \n",
      "Train error: 49939.1644\n",
      "\n",
      "Epoch: 14: 100%|##########| 500/500 [00:00<00:00, 931.88it/s] \n",
      "Train error: 49946.0733\n",
      "\n",
      "Epoch: 15: 100%|##########| 500/500 [00:00<00:00, 904.87it/s]\n",
      "Train error: 49939.4281\n",
      "\n",
      "Epoch: 16: 100%|##########| 500/500 [00:00<00:00, 918.49it/s] \n",
      "Train error: 49942.5017\n",
      "\n",
      "Epoch: 17: 100%|##########| 500/500 [00:00<00:00, 960.92it/s] \n",
      "Train error: 49949.8763\n",
      "\n",
      "Epoch: 18: 100%|##########| 500/500 [00:00<00:00, 943.66it/s] \n",
      "Train error: 49937.4019\n",
      "\n",
      "Epoch: 19: 100%|##########| 500/500 [00:00<00:00, 938.22it/s]\n",
      "Train error: 49936.6388\n",
      "\n",
      "Epoch: 20: 100%|##########| 500/500 [00:00<00:00, 914.26it/s] \n",
      "Train error: 49943.8995\n",
      "\n",
      "Epoch: 21: 100%|##########| 500/500 [00:00<00:00, 909.15it/s] \n",
      "Train error: 49944.9684\n",
      "\n",
      "Epoch: 22: 100%|##########| 500/500 [00:00<00:00, 905.10it/s]\n",
      "Train error: 49949.7833\n",
      "\n",
      "Epoch: 23: 100%|##########| 500/500 [00:00<00:00, 924.87it/s] \n",
      "Train error: 49945.4535\n",
      "\n",
      "Epoch: 24: 100%|##########| 500/500 [00:00<00:00, 959.81it/s] \n",
      "Train error: 49940.8967\n",
      "\n",
      "Epoch: 25: 100%|##########| 500/500 [00:00<00:00, 961.03it/s]\n",
      "Train error: 49941.5137\n",
      "\n",
      "Epoch: 26: 100%|##########| 500/500 [00:00<00:00, 954.96it/s]\n",
      "Train error: 49948.4276\n",
      "\n",
      "Epoch: 27: 100%|##########| 500/500 [00:00<00:00, 978.80it/s] \n",
      "Train error: 49944.1554\n",
      "\n",
      "Epoch: 28: 100%|##########| 500/500 [00:00<00:00, 952.92it/s] \n",
      "Train error: 49939.1703\n",
      "\n",
      "Epoch: 29: 100%|##########| 500/500 [00:00<00:00, 885.14it/s]\n",
      "Train error: 49936.7541\n",
      "\n",
      "Epoch: 30: 100%|##########| 500/500 [00:00<00:00, 909.19it/s]\n",
      "Train error: 49938.7465\n",
      "\n",
      "Epoch: 31: 100%|##########| 500/500 [00:00<00:00, 901.70it/s]\n",
      "Train error: 49932.7015\n",
      "\n",
      "Epoch: 32: 100%|##########| 500/500 [00:00<00:00, 932.36it/s] \n",
      "Train error: 49933.4406\n",
      "\n",
      "Epoch: 33: 100%|##########| 500/500 [00:00<00:00, 944.27it/s] \n",
      "Train error: 49955.5618\n",
      "\n",
      "Epoch: 34: 100%|##########| 500/500 [00:00<00:00, 910.53it/s] \n",
      "Train error: 49937.0873\n",
      "\n",
      "Epoch: 35: 100%|##########| 500/500 [00:00<00:00, 907.25it/s]\n",
      "Train error: 49942.1328\n",
      "\n",
      "Epoch: 36: 100%|##########| 500/500 [00:00<00:00, 890.94it/s] \n",
      "Train error: 49943.1442\n",
      "\n",
      "Epoch: 37: 100%|##########| 500/500 [00:00<00:00, 934.43it/s] \n",
      "Train error: 49944.0956\n",
      "\n",
      "Epoch: 38: 100%|##########| 500/500 [00:00<00:00, 919.95it/s]\n",
      "Train error: 49942.8887\n",
      "\n",
      "Epoch: 39: 100%|##########| 500/500 [00:00<00:00, 954.36it/s] \n",
      "Train error: 49927.4931\n",
      "\n",
      "Epoch: 40: 100%|##########| 500/500 [00:00<00:00, 922.62it/s]\n",
      "Train error: 49936.5240\n",
      "\n",
      "Epoch: 41: 100%|##########| 500/500 [00:00<00:00, 862.86it/s]\n",
      "Train error: 49936.9103\n",
      "\n",
      "Epoch: 42: 100%|##########| 500/500 [00:00<00:00, 941.54it/s]\n",
      "Train error: 49941.3946\n",
      "\n",
      "Epoch: 43: 100%|##########| 500/500 [00:00<00:00, 1019.26it/s]\n",
      "Train error: 49939.9576\n",
      "\n",
      "Epoch: 44: 100%|##########| 500/500 [00:00<00:00, 888.80it/s]\n",
      "Train error: 49944.8049\n",
      "\n",
      "Epoch: 45: 100%|##########| 500/500 [00:00<00:00, 895.74it/s]\n",
      "Train error: 49934.5341\n",
      "\n",
      "Epoch: 46: 100%|##########| 500/500 [00:00<00:00, 921.46it/s] \n",
      "Train error: 49940.3324\n",
      "\n",
      "Epoch: 47: 100%|##########| 500/500 [00:00<00:00, 914.58it/s] \n",
      "Train error: 49938.0996\n",
      "\n",
      "Epoch: 48: 100%|##########| 500/500 [00:00<00:00, 925.26it/s] \n",
      "Train error: 49953.0555\n",
      "\n",
      "Epoch: 49: 100%|##########| 500/500 [00:00<00:00, 908.37it/s]\n",
      "Train error: 49938.9386\n",
      "\n",
      "Epoch: 50: 100%|##########| 500/500 [00:00<00:00, 940.38it/s]\n",
      "Train error: 49948.1801\n",
      "\n",
      "Epoch: 51: 100%|##########| 500/500 [00:00<00:00, 865.53it/s]\n",
      "Train error: 49935.0631\n",
      "\n",
      "Epoch: 52: 100%|##########| 500/500 [00:00<00:00, 916.74it/s] \n",
      "Train error: 49944.7824\n",
      "\n",
      "Epoch: 53: 100%|##########| 500/500 [00:00<00:00, 932.06it/s]\n",
      "Train error: 49932.7110\n",
      "\n",
      "Epoch: 54: 100%|##########| 500/500 [00:00<00:00, 963.36it/s]\n",
      "Train error: 49946.5639\n",
      "\n",
      "Epoch: 55: 100%|##########| 500/500 [00:00<00:00, 932.64it/s]\n",
      "Train error: 49937.1587\n",
      "\n",
      "Epoch: 56: 100%|##########| 500/500 [00:00<00:00, 1003.06it/s]\n",
      "Train error: 49944.2856\n",
      "\n",
      "Epoch: 57: 100%|##########| 500/500 [00:00<00:00, 936.94it/s] \n",
      "Train error: 49942.7718\n",
      "\n",
      "Epoch: 58: 100%|##########| 500/500 [00:00<00:00, 928.48it/s]\n",
      "Train error: 49935.5179\n",
      "\n",
      "Epoch: 59: 100%|##########| 500/500 [00:00<00:00, 905.90it/s]\n",
      "Train error: 49950.0180\n",
      "\n",
      "Epoch: 60: 100%|##########| 500/500 [00:00<00:00, 936.96it/s] \n",
      "Train error: 49935.8734\n",
      "\n",
      "Epoch: 61: 100%|##########| 500/500 [00:00<00:00, 938.02it/s]\n",
      "Train error: 49938.0260\n",
      "\n",
      "Epoch: 62: 100%|##########| 500/500 [00:00<00:00, 961.17it/s]\n",
      "Train error: 49939.0381\n",
      "\n",
      "Epoch: 63: 100%|##########| 500/500 [00:00<00:00, 1026.59it/s]\n",
      "Train error: 49932.6279\n",
      "\n",
      "Epoch: 64: 100%|##########| 500/500 [00:00<00:00, 979.20it/s] \n",
      "Train error: 49938.8848\n",
      "\n",
      "Epoch: 65: 100%|##########| 500/500 [00:00<00:00, 954.03it/s] \n",
      "Train error: 49945.1929\n",
      "\n",
      "Epoch: 66: 100%|##########| 500/500 [00:00<00:00, 895.75it/s]\n",
      "Train error: 49939.0479\n",
      "\n",
      "Epoch: 67: 100%|##########| 500/500 [00:00<00:00, 928.27it/s] \n",
      "Train error: 49940.7358\n",
      "\n",
      "Epoch: 68: 100%|##########| 500/500 [00:00<00:00, 886.14it/s]\n",
      "Train error: 49941.4274\n",
      "\n",
      "Epoch: 69: 100%|##########| 500/500 [00:00<00:00, 893.59it/s]\n",
      "Train error: 49943.3212\n",
      "\n",
      "Epoch: 70: 100%|##########| 500/500 [00:00<00:00, 914.74it/s] \n",
      "Train error: 49945.2816\n",
      "\n",
      "Epoch: 71: 100%|##########| 500/500 [00:00<00:00, 921.10it/s] \n",
      "Train error: 49939.9679\n",
      "\n",
      "Epoch: 72: 100%|##########| 500/500 [00:00<00:00, 939.46it/s]\n",
      "Train error: 49945.1348\n",
      "\n",
      "Epoch: 73: 100%|##########| 500/500 [00:00<00:00, 931.07it/s]\n",
      "Train error: 49950.4092\n",
      "\n",
      "Epoch: 74: 100%|##########| 500/500 [00:00<00:00, 920.96it/s] \n",
      "Train error: 49944.0732\n",
      "\n",
      "Epoch: 75: 100%|##########| 500/500 [00:00<00:00, 975.44it/s] \n",
      "Train error: 49946.7846\n",
      "\n",
      "Epoch: 76: 100%|##########| 500/500 [00:00<00:00, 966.43it/s] \n",
      "Train error: 49939.4755\n",
      "\n",
      "Epoch: 77: 100%|##########| 500/500 [00:00<00:00, 970.55it/s] \n",
      "Train error: 49944.9251\n",
      "\n",
      "Epoch: 78: 100%|##########| 500/500 [00:00<00:00, 957.73it/s] \n",
      "Train error: 49940.8560\n",
      "\n",
      "Epoch: 79: 100%|##########| 500/500 [00:00<00:00, 1030.11it/s]\n",
      "Train error: 49950.6988\n",
      "\n",
      "Epoch: 80: 100%|##########| 500/500 [00:00<00:00, 921.04it/s]\n",
      "Train error: 49937.9022\n",
      "\n",
      "Epoch: 81: 100%|##########| 500/500 [00:00<00:00, 923.84it/s]\n",
      "Train error: 49941.7803\n",
      "\n",
      "Epoch: 82: 100%|##########| 500/500 [00:00<00:00, 909.03it/s]\n",
      "Train error: 49944.6895\n",
      "\n",
      "Epoch: 83: 100%|##########| 500/500 [00:00<00:00, 961.72it/s] \n",
      "Train error: 49936.8580\n",
      "\n",
      "Epoch: 84: 100%|##########| 500/500 [00:00<00:00, 953.93it/s] \n",
      "Train error: 49930.9383\n",
      "\n",
      "Epoch: 85: 100%|##########| 500/500 [00:00<00:00, 961.30it/s] \n",
      "Train error: 49937.9533\n",
      "\n",
      "Epoch: 86: 100%|##########| 500/500 [00:00<00:00, 915.05it/s]\n",
      "Train error: 49938.5051\n",
      "\n",
      "Epoch: 87: 100%|##########| 500/500 [00:00<00:00, 943.20it/s]\n",
      "Train error: 49935.0426\n",
      "\n",
      "Epoch: 88: 100%|##########| 500/500 [00:00<00:00, 892.61it/s]\n",
      "Train error: 49941.3756\n",
      "\n",
      "Epoch: 89: 100%|##########| 500/500 [00:00<00:00, 920.80it/s] \n",
      "Train error: 49939.3866\n",
      "\n",
      "Epoch: 90: 100%|##########| 500/500 [00:00<00:00, 916.10it/s]\n",
      "Train error: 49937.3953\n",
      "\n",
      "Epoch: 91: 100%|##########| 500/500 [00:00<00:00, 959.44it/s] \n",
      "Train error: 49944.4489\n",
      "\n",
      "Epoch: 92: 100%|##########| 500/500 [00:00<00:00, 938.11it/s]\n",
      "Train error: 49941.6834\n",
      "\n",
      "Epoch: 93: 100%|##########| 500/500 [00:00<00:00, 925.24it/s]\n",
      "Train error: 49940.0783\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 94: 100%|##########| 500/500 [00:00<00:00, 938.94it/s]\n",
      "Train error: 49935.7176\n",
      "\n",
      "Epoch: 95: 100%|##########| 500/500 [00:00<00:00, 908.35it/s]\n",
      "Train error: 49944.5693\n",
      "\n",
      "Epoch: 96: 100%|##########| 500/500 [00:00<00:00, 905.05it/s]\n",
      "Train error: 49943.1749\n",
      "\n",
      "Epoch: 97: 100%|##########| 500/500 [00:00<00:00, 913.24it/s] \n",
      "Train error: 49946.2923\n",
      "\n",
      "Epoch: 98: 100%|##########| 500/500 [00:00<00:00, 906.25it/s]\n",
      "Train error: 49933.3140\n",
      "\n",
      "Epoch: 99: 100%|##########| 500/500 [00:00<00:00, 913.94it/s] \n",
      "Train error: 49942.2836\n",
      "\n",
      "Epoch: 100: 100%|##########| 500/500 [00:00<00:00, 934.62it/s] \n",
      "Train error: 49937.9046\n",
      "\n",
      "Epoch: 101: 100%|##########| 500/500 [00:00<00:00, 911.39it/s]\n",
      "Train error: 49938.0954\n",
      "\n",
      "Epoch: 102: 100%|##########| 500/500 [00:00<00:00, 920.89it/s]\n",
      "Train error: 49937.2960\n",
      "\n",
      "Epoch: 103: 100%|##########| 500/500 [00:00<00:00, 904.72it/s]\n",
      "Train error: 49942.7494\n",
      "\n",
      "Epoch: 104: 100%|##########| 500/500 [00:00<00:00, 892.83it/s]\n",
      "Train error: 49943.3277\n",
      "\n",
      "Epoch: 105: 100%|##########| 500/500 [00:00<00:00, 875.69it/s]\n",
      "Train error: 49940.2749\n",
      "\n",
      "Epoch: 106: 100%|##########| 500/500 [00:00<00:00, 919.98it/s]\n",
      "Train error: 49939.0985\n",
      "\n",
      "Epoch: 107: 100%|##########| 500/500 [00:00<00:00, 877.92it/s]\n",
      "Train error: 49952.8389\n",
      "\n",
      "Epoch: 108: 100%|##########| 500/500 [00:00<00:00, 880.63it/s]\n",
      "Train error: 49942.8675\n",
      "\n",
      "Epoch: 109: 100%|##########| 500/500 [00:00<00:00, 894.50it/s]\n",
      "Train error: 49943.2128\n",
      "\n",
      "Epoch: 110: 100%|##########| 500/500 [00:00<00:00, 874.26it/s]\n",
      "Train error: 49946.1247\n",
      "\n",
      "Epoch: 111: 100%|##########| 500/500 [00:00<00:00, 890.39it/s]\n",
      "Train error: 49943.4620\n",
      "\n",
      "Epoch: 112: 100%|##########| 500/500 [00:00<00:00, 903.38it/s]\n",
      "Train error: 49954.3334\n",
      "\n",
      "Epoch: 113: 100%|##########| 500/500 [00:00<00:00, 914.27it/s] \n",
      "Train error: 49946.4301\n",
      "\n",
      "Epoch: 114: 100%|##########| 500/500 [00:00<00:00, 888.62it/s]\n",
      "Train error: 49940.3988\n",
      "\n",
      "Epoch: 115: 100%|##########| 500/500 [00:00<00:00, 911.73it/s]\n",
      "Train error: 49943.0426\n",
      "\n",
      "Epoch: 116: 100%|##########| 500/500 [00:00<00:00, 897.93it/s]\n",
      "Train error: 49953.7112\n",
      "\n",
      "Epoch: 117: 100%|##########| 500/500 [00:00<00:00, 890.53it/s]\n",
      "Train error: 49943.6212\n",
      "\n",
      "Epoch: 118: 100%|##########| 500/500 [00:00<00:00, 863.94it/s]\n",
      "Train error: 49950.2588\n",
      "\n",
      "Epoch: 119: 100%|##########| 500/500 [00:00<00:00, 916.81it/s] \n",
      "Train error: 49943.8076\n",
      "\n",
      "Epoch: 120: 100%|##########| 500/500 [00:00<00:00, 886.68it/s]\n",
      "Train error: 49933.8164\n",
      "\n",
      "Epoch: 121: 100%|##########| 500/500 [00:00<00:00, 899.52it/s]\n",
      "Train error: 49958.6633\n",
      "\n",
      "Epoch: 122: 100%|##########| 500/500 [00:00<00:00, 865.95it/s]\n",
      "Train error: 49942.8652\n",
      "\n",
      "Epoch: 123: 100%|##########| 500/500 [00:00<00:00, 864.18it/s]\n",
      "Train error: 49941.8918\n",
      "\n",
      "Epoch: 124: 100%|##########| 500/500 [00:00<00:00, 913.26it/s]\n",
      "Train error: 49942.7215\n",
      "\n",
      "Epoch: 125: 100%|##########| 500/500 [00:00<00:00, 918.27it/s] \n",
      "Train error: 49951.4647\n",
      "\n",
      "Epoch: 126: 100%|##########| 500/500 [00:00<00:00, 886.55it/s]\n",
      "Train error: 49943.0957\n",
      "\n",
      "Epoch: 127: 100%|##########| 500/500 [00:00<00:00, 927.84it/s]\n",
      "Train error: 49943.7568\n",
      "\n",
      "Epoch: 128: 100%|##########| 500/500 [00:00<00:00, 882.99it/s]\n",
      "Train error: 49954.1713\n",
      "\n",
      "Epoch: 129: 100%|##########| 500/500 [00:00<00:00, 890.63it/s]\n",
      "Train error: 49934.0636\n",
      "\n",
      "Epoch: 130: 100%|##########| 500/500 [00:00<00:00, 912.22it/s] \n",
      "Train error: 49945.5235\n",
      "\n",
      "Epoch: 131: 100%|##########| 500/500 [00:00<00:00, 919.88it/s]\n",
      "Train error: 49932.7951\n",
      "\n",
      "Epoch: 132: 100%|##########| 500/500 [00:00<00:00, 866.26it/s]\n",
      "Train error: 49935.9093\n",
      "\n",
      "Epoch: 133: 100%|##########| 500/500 [00:00<00:00, 899.80it/s]\n",
      "Train error: 49951.3491\n",
      "\n",
      "Epoch: 134: 100%|##########| 500/500 [00:00<00:00, 917.96it/s] \n",
      "Train error: 49946.3434\n",
      "\n",
      "Epoch: 135: 100%|##########| 500/500 [00:00<00:00, 679.82it/s]\n",
      "Train error: 49938.7586\n",
      "\n",
      "Epoch: 136: 100%|##########| 500/500 [00:00<00:00, 889.46it/s]\n",
      "Train error: 49958.7203\n",
      "\n",
      "Epoch: 137: 100%|##########| 500/500 [00:00<00:00, 906.01it/s]\n",
      "Train error: 49945.6907\n",
      "\n",
      "Epoch: 138: 100%|##########| 500/500 [00:00<00:00, 956.67it/s] \n",
      "Train error: 49950.4037\n",
      "\n",
      "Epoch: 139: 100%|##########| 500/500 [00:00<00:00, 899.88it/s]\n",
      "Train error: 49943.7722\n",
      "\n",
      "Epoch: 140: 100%|##########| 500/500 [00:00<00:00, 924.83it/s]\n",
      "Train error: 49941.5607\n",
      "\n",
      "Epoch: 141: 100%|##########| 500/500 [00:00<00:00, 913.88it/s]\n",
      "Train error: 49949.0651\n",
      "\n",
      "Epoch: 142: 100%|##########| 500/500 [00:00<00:00, 899.90it/s]\n",
      "Train error: 49940.3831\n",
      "\n",
      "Epoch: 143: 100%|##########| 500/500 [00:00<00:00, 890.43it/s]\n",
      "Train error: 49940.0042\n",
      "\n",
      "Epoch: 144: 100%|##########| 500/500 [00:00<00:00, 893.69it/s] \n",
      "Train error: 49944.7473\n",
      "\n",
      "Epoch: 145: 100%|##########| 500/500 [00:00<00:00, 921.21it/s]\n",
      "Train error: 49947.0805\n",
      "\n",
      "Epoch: 146: 100%|##########| 500/500 [00:00<00:00, 932.90it/s] \n",
      "Train error: 49939.9588\n",
      "\n",
      "Epoch: 147: 100%|##########| 500/500 [00:00<00:00, 906.65it/s]\n",
      "Train error: 49943.3648\n",
      "\n",
      "Epoch: 148: 100%|##########| 500/500 [00:00<00:00, 921.00it/s] \n",
      "Train error: 49949.8801\n",
      "\n",
      "Epoch: 149: 100%|##########| 500/500 [00:00<00:00, 922.72it/s]\n",
      "Train error: 49941.4049\n",
      "\n",
      "Epoch: 150: 100%|##########| 500/500 [00:00<00:00, 911.62it/s]\n",
      "Train error: 49942.9598\n",
      "\n",
      "Epoch: 151: 100%|##########| 500/500 [00:00<00:00, 927.26it/s]\n",
      "Train error: 49948.2396\n",
      "\n",
      "Epoch: 152: 100%|##########| 500/500 [00:00<00:00, 922.52it/s]\n",
      "Train error: 49944.7162\n",
      "\n",
      "Epoch: 153: 100%|##########| 500/500 [00:00<00:00, 931.36it/s]\n",
      "Train error: 49939.8743\n",
      "\n",
      "Epoch: 154: 100%|##########| 500/500 [00:00<00:00, 883.03it/s]\n",
      "Train error: 49941.1150\n",
      "\n",
      "Epoch: 155: 100%|##########| 500/500 [00:00<00:00, 905.49it/s]\n",
      "Train error: 49934.4644\n",
      "\n",
      "Epoch: 156: 100%|##########| 500/500 [00:00<00:00, 963.79it/s] \n",
      "Train error: 49945.5762\n",
      "\n",
      "Epoch: 157: 100%|##########| 500/500 [00:00<00:00, 919.61it/s]\n",
      "Train error: 49950.0402\n",
      "\n",
      "Epoch: 158: 100%|##########| 500/500 [00:00<00:00, 920.15it/s] \n",
      "Train error: 49934.6820\n",
      "\n",
      "Epoch: 159: 100%|##########| 500/500 [00:00<00:00, 898.24it/s] \n",
      "Train error: 49947.7544\n",
      "\n",
      "Epoch: 160: 100%|##########| 500/500 [00:00<00:00, 955.91it/s] \n",
      "Train error: 49929.0637\n",
      "\n",
      "Epoch: 161: 100%|##########| 500/500 [00:00<00:00, 957.92it/s] \n",
      "Train error: 49948.7790\n",
      "\n",
      "Epoch: 162: 100%|##########| 500/500 [00:00<00:00, 950.01it/s] \n",
      "Train error: 49941.9994\n",
      "\n",
      "Epoch: 163: 100%|##########| 500/500 [00:00<00:00, 949.50it/s] \n",
      "Train error: 49943.9036\n",
      "\n",
      "Epoch: 164: 100%|##########| 500/500 [00:00<00:00, 934.40it/s]\n",
      "Train error: 49948.7419\n",
      "\n",
      "Epoch: 165: 100%|##########| 500/500 [00:00<00:00, 917.86it/s]\n",
      "Train error: 49942.9386\n",
      "\n",
      "Epoch: 166: 100%|##########| 500/500 [00:00<00:00, 957.73it/s] \n",
      "Train error: 49944.3014\n",
      "\n",
      "Epoch: 167: 100%|##########| 500/500 [00:00<00:00, 953.12it/s] \n",
      "Train error: 49946.0978\n",
      "\n",
      "Epoch: 168: 100%|##########| 500/500 [00:00<00:00, 949.07it/s] \n",
      "Train error: 49952.6586\n",
      "\n",
      "Epoch: 169: 100%|##########| 500/500 [00:00<00:00, 914.69it/s]\n",
      "Train error: 49937.9221\n",
      "\n",
      "Epoch: 170: 100%|##########| 500/500 [00:00<00:00, 962.32it/s] \n",
      "Train error: 49944.5619\n",
      "\n",
      "Epoch: 171: 100%|##########| 500/500 [00:00<00:00, 935.79it/s]\n",
      "Train error: 49951.5445\n",
      "\n",
      "Epoch: 172: 100%|##########| 500/500 [00:00<00:00, 965.50it/s] \n",
      "Train error: 49947.6067\n",
      "\n",
      "Epoch: 173: 100%|##########| 500/500 [00:00<00:00, 938.65it/s] \n",
      "Train error: 49952.6127\n",
      "\n",
      "Epoch: 174: 100%|##########| 500/500 [00:00<00:00, 915.05it/s]\n",
      "Train error: 49949.0011\n",
      "\n",
      "Epoch: 175: 100%|##########| 500/500 [00:00<00:00, 936.80it/s] \n",
      "Train error: 49941.1429\n",
      "\n",
      "Epoch: 176: 100%|##########| 500/500 [00:00<00:00, 953.58it/s] \n",
      "Train error: 49954.1167\n",
      "\n",
      "Epoch: 177: 100%|##########| 500/500 [00:00<00:00, 941.71it/s]\n",
      "Train error: 49945.3751\n",
      "\n",
      "Epoch: 178: 100%|##########| 500/500 [00:00<00:00, 920.62it/s]\n",
      "Train error: 49936.1313\n",
      "\n",
      "Epoch: 179: 100%|##########| 500/500 [00:00<00:00, 928.55it/s]\n",
      "Train error: 49949.6152\n",
      "\n",
      "Epoch: 180: 100%|##########| 500/500 [00:00<00:00, 947.53it/s]\n",
      "Train error: 49941.5767\n",
      "\n",
      "Epoch: 181: 100%|##########| 500/500 [00:00<00:00, 939.55it/s] \n",
      "Train error: 49950.0888\n",
      "\n",
      "Epoch: 182: 100%|##########| 500/500 [00:00<00:00, 947.57it/s]\n",
      "Train error: 49945.9096\n",
      "\n",
      "Epoch: 183: 100%|##########| 500/500 [00:00<00:00, 973.07it/s]\n",
      "Train error: 49953.3084\n",
      "\n",
      "Epoch: 184: 100%|##########| 500/500 [00:00<00:00, 924.77it/s]\n",
      "Train error: 49944.5105\n",
      "\n",
      "Epoch: 185: 100%|##########| 500/500 [00:00<00:00, 950.29it/s] \n",
      "Train error: 49952.7044\n",
      "\n",
      "Epoch: 186: 100%|##########| 500/500 [00:00<00:00, 986.74it/s]\n",
      "Train error: 49950.7397\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 187: 100%|##########| 500/500 [00:00<00:00, 881.91it/s] \n",
      "Train error: 49956.9040\n",
      "\n",
      "Epoch: 188: 100%|##########| 500/500 [00:00<00:00, 869.68it/s]\n",
      "Train error: 49945.3641\n",
      "\n",
      "Epoch: 189: 100%|##########| 500/500 [00:00<00:00, 914.07it/s]\n",
      "Train error: 49938.3969\n",
      "\n",
      "Epoch: 190: 100%|##########| 500/500 [00:00<00:00, 901.09it/s]\n",
      "Train error: 49948.6368\n",
      "\n",
      "Epoch: 191: 100%|##########| 500/500 [00:00<00:00, 891.50it/s]\n",
      "Train error: 49953.6815\n",
      "\n",
      "Epoch: 192: 100%|##########| 500/500 [00:00<00:00, 923.13it/s]\n",
      "Train error: 49948.4104\n",
      "\n",
      "Epoch: 193: 100%|##########| 500/500 [00:00<00:00, 950.79it/s]\n",
      "Train error: 49948.8142\n",
      "\n",
      "Epoch: 194: 100%|##########| 500/500 [00:00<00:00, 906.47it/s]\n",
      "Train error: 49945.8915\n",
      "\n",
      "Epoch: 195: 100%|##########| 500/500 [00:00<00:00, 872.50it/s]\n",
      "Train error: 49933.7285\n",
      "\n",
      "Epoch: 196: 100%|##########| 500/500 [00:00<00:00, 908.31it/s]\n",
      "Train error: 49951.5301\n",
      "\n",
      "Epoch: 197: 100%|##########| 500/500 [00:00<00:00, 846.96it/s]\n",
      "Train error: 49953.2895\n",
      "\n",
      "Epoch: 198: 100%|##########| 500/500 [00:00<00:00, 860.01it/s]\n",
      "Train error: 49941.9520\n",
      "\n",
      "Epoch: 199: 100%|##########| 500/500 [00:00<00:00, 1019.70it/s]\n",
      "Train error: 49950.2568\n",
      "\n",
      "Epoch: 200: 100%|##########| 500/500 [00:00<00:00, 946.29it/s] \n",
      "Train error: 49941.6068\n",
      "\n",
      "Epoch: 201: 100%|##########| 500/500 [00:00<00:00, 1088.41it/s]\n",
      "Train error: 49947.3276\n",
      "\n",
      "Epoch: 202: 100%|##########| 500/500 [00:00<00:00, 956.17it/s] \n",
      "Train error: 49944.7381\n",
      "\n",
      "Epoch: 203: 100%|##########| 500/500 [00:00<00:00, 1014.08it/s]\n",
      "Train error: 49952.3122\n",
      "\n",
      "Epoch: 204: 100%|##########| 500/500 [00:00<00:00, 945.16it/s] \n",
      "Train error: 49942.7512\n",
      "\n",
      "Epoch: 205: 100%|##########| 500/500 [00:00<00:00, 903.14it/s]\n",
      "Train error: 49945.1286\n",
      "\n",
      "Epoch: 206: 100%|##########| 500/500 [00:00<00:00, 932.99it/s] \n",
      "Train error: 49946.2950\n",
      "\n",
      "Epoch: 207: 100%|##########| 500/500 [00:00<00:00, 953.25it/s]\n",
      "Train error: 49947.4987\n",
      "\n",
      "Epoch: 208: 100%|##########| 500/500 [00:00<00:00, 1033.01it/s]\n",
      "Train error: 49940.0035\n",
      "\n",
      "Epoch: 209: 100%|##########| 500/500 [00:00<00:00, 998.56it/s] \n",
      "Train error: 49938.9374\n",
      "\n",
      "Epoch: 210: 100%|##########| 500/500 [00:00<00:00, 1008.76it/s]\n",
      "Train error: 49939.4137\n",
      "\n",
      "Epoch: 211: 100%|##########| 500/500 [00:00<00:00, 920.39it/s] \n",
      "Train error: 49945.2951\n",
      "\n",
      "Epoch: 212: 100%|##########| 500/500 [00:00<00:00, 920.68it/s]\n",
      "Train error: 49940.0373\n",
      "\n",
      "Epoch: 213: 100%|##########| 500/500 [00:00<00:00, 925.27it/s] \n",
      "Train error: 49952.8998\n",
      "\n",
      "Epoch: 214: 100%|##########| 500/500 [00:00<00:00, 879.58it/s]\n",
      "Train error: 49945.2538\n",
      "\n",
      "Epoch: 215: 100%|##########| 500/500 [00:00<00:00, 893.15it/s]\n",
      "Train error: 49952.7937\n",
      "\n",
      "Epoch: 216: 100%|##########| 500/500 [00:00<00:00, 941.26it/s] \n",
      "Train error: 49950.7864\n",
      "\n",
      "Epoch: 217: 100%|##########| 500/500 [00:00<00:00, 918.31it/s]\n",
      "Train error: 49947.1329\n",
      "\n",
      "Epoch: 218: 100%|##########| 500/500 [00:00<00:00, 919.68it/s]\n",
      "Train error: 49947.9485\n",
      "\n",
      "Epoch: 219: 100%|##########| 500/500 [00:00<00:00, 901.00it/s] \n",
      "Train error: 49949.0854\n",
      "\n",
      "Epoch: 220: 100%|##########| 500/500 [00:00<00:00, 891.23it/s]\n",
      "Train error: 49942.6839\n",
      "\n",
      "Epoch: 221: 100%|##########| 500/500 [00:00<00:00, 958.07it/s] \n",
      "Train error: 49945.0966\n",
      "\n",
      "Epoch: 222: 100%|##########| 500/500 [00:00<00:00, 896.49it/s]\n",
      "Train error: 49949.9981\n",
      "\n",
      "Epoch: 223: 100%|##########| 500/500 [00:00<00:00, 955.48it/s] \n",
      "Train error: 49943.5084\n",
      "\n",
      "Epoch: 224: 100%|##########| 500/500 [00:00<00:00, 942.92it/s]\n",
      "Train error: 49951.8336\n",
      "\n",
      "Epoch: 225: 100%|##########| 500/500 [00:00<00:00, 1007.92it/s]\n",
      "Train error: 49946.0406\n",
      "\n",
      "Epoch: 226: 100%|##########| 500/500 [00:00<00:00, 996.36it/s] \n",
      "Train error: 49952.3578\n",
      "\n",
      "Epoch: 227: 100%|##########| 500/500 [00:00<00:00, 1015.39it/s]\n",
      "Train error: 49947.6881\n",
      "\n",
      "Epoch: 228: 100%|##########| 500/500 [00:00<00:00, 1035.21it/s]\n",
      "Train error: 49942.1546\n",
      "\n",
      "Epoch: 229: 100%|##########| 500/500 [00:00<00:00, 955.52it/s] \n",
      "Train error: 49948.6091\n",
      "\n",
      "Epoch: 230: 100%|##########| 500/500 [00:00<00:00, 976.35it/s] \n",
      "Train error: 49953.3977\n",
      "\n",
      "Epoch: 231: 100%|##########| 500/500 [00:00<00:00, 1002.08it/s]\n",
      "Train error: 49940.3514\n",
      "\n",
      "Epoch: 232: 100%|##########| 500/500 [00:00<00:00, 948.71it/s] \n",
      "Train error: 49947.1975\n",
      "\n",
      "Epoch: 233: 100%|##########| 500/500 [00:00<00:00, 900.13it/s] \n",
      "Train error: 49949.2715\n",
      "\n",
      "Epoch: 234: 100%|##########| 500/500 [00:00<00:00, 908.10it/s] \n",
      "Train error: 49954.8534\n",
      "\n",
      "Epoch: 235: 100%|##########| 500/500 [00:00<00:00, 933.54it/s] \n",
      "Train error: 49939.5989\n",
      "\n",
      "Epoch: 236: 100%|##########| 500/500 [00:00<00:00, 954.01it/s]\n",
      "Train error: 49940.7553\n",
      "\n",
      "Epoch: 237: 100%|##########| 500/500 [00:00<00:00, 1029.07it/s]\n",
      "Train error: 49939.9863\n",
      "\n",
      "Epoch: 238: 100%|##########| 500/500 [00:00<00:00, 919.03it/s] \n",
      "Train error: 49936.4348\n",
      "\n",
      "Epoch: 239: 100%|##########| 500/500 [00:00<00:00, 903.87it/s]\n",
      "Train error: 49956.2939\n",
      "\n",
      "Epoch: 240: 100%|##########| 500/500 [00:00<00:00, 924.44it/s] \n",
      "Train error: 49950.8481\n",
      "\n",
      "Epoch: 241: 100%|##########| 500/500 [00:00<00:00, 939.50it/s]\n",
      "Train error: 49946.0119\n",
      "\n",
      "Epoch: 242: 100%|##########| 500/500 [00:00<00:00, 900.25it/s]\n",
      "Train error: 49949.1529\n",
      "\n",
      "Epoch: 243: 100%|##########| 500/500 [00:00<00:00, 900.39it/s]\n",
      "Train error: 49950.4892\n",
      "\n",
      "Epoch: 244: 100%|##########| 500/500 [00:00<00:00, 918.64it/s]\n",
      "Train error: 49946.0811\n",
      "\n",
      "Epoch: 245: 100%|##########| 500/500 [00:00<00:00, 952.41it/s] \n",
      "Train error: 49950.5476\n",
      "\n",
      "Epoch: 246: 100%|##########| 500/500 [00:00<00:00, 923.04it/s]\n",
      "Train error: 49951.6866\n",
      "\n",
      "Epoch: 247: 100%|##########| 500/500 [00:00<00:00, 918.59it/s]\n",
      "Train error: 49942.6422\n",
      "\n",
      "Epoch: 248: 100%|##########| 500/500 [00:00<00:00, 996.39it/s] \n",
      "Train error: 49949.0745\n",
      "\n",
      "Epoch: 249: 100%|##########| 500/500 [00:00<00:00, 1022.47it/s]\n",
      "Train error: 49956.4720\n",
      "\n",
      "Epoch: 250: 100%|##########| 500/500 [00:00<00:00, 1045.38it/s]\n",
      "Train error: 49950.7462\n",
      "\n",
      "Epoch: 251: 100%|##########| 500/500 [00:00<00:00, 933.58it/s]\n",
      "Train error: 49957.7166\n",
      "\n",
      "Epoch: 252: 100%|##########| 500/500 [00:00<00:00, 940.99it/s]\n",
      "Train error: 49951.8474\n",
      "\n",
      "Epoch: 253: 100%|##########| 500/500 [00:00<00:00, 941.52it/s]\n",
      "Train error: 49951.1831\n",
      "\n",
      "Epoch: 254: 100%|##########| 500/500 [00:00<00:00, 948.87it/s] \n",
      "Train error: 49957.3893\n",
      "\n",
      "Epoch: 255: 100%|##########| 500/500 [00:00<00:00, 895.22it/s]\n",
      "Train error: 49951.2490\n",
      "\n",
      "Epoch: 256: 100%|##########| 500/500 [00:00<00:00, 899.98it/s] \n",
      "Train error: 49949.6722\n",
      "\n",
      "Epoch: 257: 100%|##########| 500/500 [00:00<00:00, 821.25it/s]\n",
      "Train error: 49946.8848\n",
      "\n",
      "Epoch: 258: 100%|##########| 500/500 [00:00<00:00, 785.79it/s]\n",
      "Train error: 49960.0205\n",
      "\n",
      "Epoch: 259: 100%|##########| 500/500 [00:00<00:00, 944.80it/s]\n",
      "Train error: 49948.8494\n",
      "\n",
      "Epoch: 260: 100%|##########| 500/500 [00:00<00:00, 838.43it/s]\n",
      "Train error: 49951.3479\n",
      "\n",
      "Epoch: 261: 100%|##########| 500/500 [00:00<00:00, 922.72it/s] \n",
      "Train error: 49955.2596\n",
      "\n",
      "Epoch: 262: 100%|##########| 500/500 [00:00<00:00, 954.96it/s]\n",
      "Train error: 49949.2187\n",
      "\n",
      "Epoch: 263: 100%|##########| 500/500 [00:00<00:00, 1054.70it/s]\n",
      "Train error: 49955.7074\n",
      "\n",
      "Epoch: 264: 100%|##########| 500/500 [00:00<00:00, 932.77it/s]\n",
      "Train error: 49946.2732\n",
      "\n",
      "Epoch: 265: 100%|##########| 500/500 [00:00<00:00, 919.23it/s] \n",
      "Train error: 49957.9953\n",
      "\n",
      "Epoch: 266: 100%|##########| 500/500 [00:00<00:00, 964.72it/s] \n",
      "Train error: 49957.4575\n",
      "\n",
      "Epoch: 267: 100%|##########| 500/500 [00:00<00:00, 944.86it/s]\n",
      "Train error: 49949.6731\n",
      "\n",
      "Epoch: 268: 100%|##########| 500/500 [00:00<00:00, 928.45it/s]\n",
      "Train error: 49945.4598\n",
      "\n",
      "Epoch: 269: 100%|##########| 500/500 [00:00<00:00, 1022.55it/s]\n",
      "Train error: 49958.4942\n",
      "\n",
      "Epoch: 270: 100%|##########| 500/500 [00:00<00:00, 973.04it/s] \n",
      "Train error: 49954.3661\n",
      "\n",
      "Epoch: 271: 100%|##########| 500/500 [00:00<00:00, 970.48it/s]\n",
      "Train error: 49950.9126\n",
      "\n",
      "Epoch: 272: 100%|##########| 500/500 [00:00<00:00, 994.18it/s] \n",
      "Train error: 49947.7850\n",
      "\n",
      "Epoch: 273: 100%|##########| 500/500 [00:00<00:00, 933.20it/s] \n",
      "Train error: 49952.0997\n",
      "\n",
      "Epoch: 274: 100%|##########| 500/500 [00:00<00:00, 946.88it/s]\n",
      "Train error: 49956.2855\n",
      "\n",
      "Epoch: 275: 100%|##########| 500/500 [00:00<00:00, 980.15it/s]\n",
      "Train error: 49945.9467\n",
      "\n",
      "Epoch: 276: 100%|##########| 500/500 [00:00<00:00, 913.48it/s]\n",
      "Train error: 49950.8764\n",
      "\n",
      "Epoch: 277: 100%|##########| 500/500 [00:00<00:00, 902.77it/s]\n",
      "Train error: 49956.6410\n",
      "\n",
      "Epoch: 278: 100%|##########| 500/500 [00:00<00:00, 937.34it/s] \n",
      "Train error: 49951.9262\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 279: 100%|##########| 500/500 [00:00<00:00, 928.15it/s] \n",
      "Train error: 49964.6041\n",
      "\n",
      "Epoch: 280: 100%|##########| 500/500 [00:00<00:00, 875.63it/s]\n",
      "Train error: 49957.7764\n",
      "\n",
      "Epoch: 281: 100%|##########| 500/500 [00:00<00:00, 900.15it/s]\n",
      "Train error: 49960.3292\n",
      "\n",
      "Epoch: 282: 100%|##########| 500/500 [00:00<00:00, 855.12it/s]\n",
      "Train error: 49951.3486\n",
      "\n",
      "Epoch: 283: 100%|##########| 500/500 [00:00<00:00, 923.55it/s] \n",
      "Train error: 49950.0683\n",
      "\n",
      "Epoch: 284: 100%|##########| 500/500 [00:00<00:00, 875.17it/s]\n",
      "Train error: 49951.1721\n",
      "\n",
      "Epoch: 285: 100%|##########| 500/500 [00:00<00:00, 886.07it/s]\n",
      "Train error: 49951.3364\n",
      "\n",
      "Epoch: 286: 100%|##########| 500/500 [00:00<00:00, 876.25it/s]\n",
      "Train error: 49947.7677\n",
      "\n",
      "Epoch: 287: 100%|##########| 500/500 [00:00<00:00, 892.63it/s]\n",
      "Train error: 49948.4182\n",
      "\n",
      "Epoch: 288: 100%|##########| 500/500 [00:00<00:00, 870.16it/s]\n",
      "Train error: 49961.2263\n",
      "\n",
      "Epoch: 289: 100%|##########| 500/500 [00:00<00:00, 901.77it/s] \n",
      "Train error: 49962.7651\n",
      "\n",
      "Epoch: 290: 100%|##########| 500/500 [00:00<00:00, 903.17it/s]\n",
      "Train error: 49960.6896\n",
      "\n",
      "Epoch: 291: 100%|##########| 500/500 [00:00<00:00, 1000.95it/s]\n",
      "Train error: 49960.2020\n",
      "\n",
      "Epoch: 292: 100%|##########| 500/500 [00:00<00:00, 944.41it/s] \n",
      "Train error: 49958.9923\n",
      "\n",
      "Epoch: 293: 100%|##########| 500/500 [00:00<00:00, 961.02it/s] \n",
      "Train error: 49948.5471\n",
      "\n",
      "Epoch: 294: 100%|##########| 500/500 [00:00<00:00, 901.64it/s] \n",
      "Train error: 49946.0710\n",
      "\n",
      "Epoch: 295: 100%|##########| 500/500 [00:00<00:00, 980.44it/s] \n",
      "Train error: 49957.4125\n",
      "\n",
      "Epoch: 296: 100%|##########| 500/500 [00:00<00:00, 916.27it/s]\n",
      "Train error: 49948.6195\n",
      "\n",
      "Epoch: 297: 100%|##########| 500/500 [00:00<00:00, 950.26it/s]\n",
      "Train error: 49955.3403\n",
      "\n",
      "Epoch: 298: 100%|##########| 500/500 [00:00<00:00, 953.23it/s]\n",
      "Train error: 49944.8475\n",
      "\n",
      "Epoch: 299: 100%|##########| 500/500 [00:00<00:00, 884.89it/s]\n",
      "Train error: 49951.4339\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# errs = gbrbm.fit(red_data, n_epoches=300, batch_size=20)\n",
    "# plt.plot(errs)\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "rbm_hidden = gbrbm.transform(red_data)\n",
    "val_hidden = gbrbm.transform(val_img)\n",
    "test_hidden = gbrbm.transform(test_images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 10000 samples, validate on 1000 samples\n",
      "Epoch 1/150\n",
      "10000/10000 [==============================] - 1s 132us/step - loss: 1.8860 - acc: 0.3488 - val_loss: 1.2647 - val_acc: 0.5530\n",
      "Epoch 2/150\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 1.1606 - acc: 0.6065 - val_loss: 1.0125 - val_acc: 0.6430\n",
      "Epoch 3/150\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 1.0642 - acc: 0.6407 - val_loss: 0.9430 - val_acc: 0.6790\n",
      "Epoch 4/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 1.0288 - acc: 0.6520 - val_loss: 0.9449 - val_acc: 0.6650\n",
      "Epoch 5/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 1.0061 - acc: 0.6616 - val_loss: 0.9143 - val_acc: 0.6720\n",
      "Epoch 6/150\n",
      "10000/10000 [==============================] - 1s 97us/step - loss: 0.9879 - acc: 0.6671 - val_loss: 0.8892 - val_acc: 0.6810\n",
      "Epoch 7/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.9620 - acc: 0.6695 - val_loss: 0.8674 - val_acc: 0.7020\n",
      "Epoch 8/150\n",
      "10000/10000 [==============================] - 1s 91us/step - loss: 0.9504 - acc: 0.6756 - val_loss: 0.8835 - val_acc: 0.6780\n",
      "Epoch 9/150\n",
      "10000/10000 [==============================] - 1s 93us/step - loss: 0.9291 - acc: 0.6814 - val_loss: 0.8461 - val_acc: 0.7030\n",
      "Epoch 10/150\n",
      "10000/10000 [==============================] - 1s 91us/step - loss: 0.9226 - acc: 0.6862 - val_loss: 0.8491 - val_acc: 0.6920\n",
      "Epoch 11/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.9093 - acc: 0.6911 - val_loss: 0.8312 - val_acc: 0.7010\n",
      "Epoch 12/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.8978 - acc: 0.6929 - val_loss: 0.8078 - val_acc: 0.7080\n",
      "Epoch 13/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.8908 - acc: 0.6956 - val_loss: 0.8096 - val_acc: 0.7030\n",
      "Epoch 14/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8791 - acc: 0.6942 - val_loss: 0.7981 - val_acc: 0.7090\n",
      "Epoch 15/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8713 - acc: 0.7025 - val_loss: 0.7956 - val_acc: 0.7170\n",
      "Epoch 16/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8647 - acc: 0.7044 - val_loss: 0.8117 - val_acc: 0.6930\n",
      "Epoch 17/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.8571 - acc: 0.7022 - val_loss: 0.7946 - val_acc: 0.7060\n",
      "Epoch 18/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.8529 - acc: 0.7026 - val_loss: 0.7901 - val_acc: 0.7030\n",
      "Epoch 19/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.8478 - acc: 0.7037 - val_loss: 0.7896 - val_acc: 0.7040\n",
      "Epoch 20/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.8426 - acc: 0.7048 - val_loss: 0.8029 - val_acc: 0.7040\n",
      "Epoch 21/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.8377 - acc: 0.7081 - val_loss: 0.7858 - val_acc: 0.7040\n",
      "Epoch 22/150\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.8331 - acc: 0.7057 - val_loss: 0.7755 - val_acc: 0.7170\n",
      "Epoch 23/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.8292 - acc: 0.7121 - val_loss: 0.7833 - val_acc: 0.7170\n",
      "Epoch 24/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8305 - acc: 0.7070 - val_loss: 0.7716 - val_acc: 0.7230\n",
      "Epoch 25/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.8181 - acc: 0.7112 - val_loss: 0.7818 - val_acc: 0.7050\n",
      "Epoch 26/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.8191 - acc: 0.7098 - val_loss: 0.7727 - val_acc: 0.7140\n",
      "Epoch 27/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.8080 - acc: 0.7106 - val_loss: 0.7726 - val_acc: 0.7280\n",
      "Epoch 28/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8143 - acc: 0.7129 - val_loss: 0.7802 - val_acc: 0.7200\n",
      "Epoch 29/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8069 - acc: 0.7148 - val_loss: 0.7716 - val_acc: 0.7220\n",
      "Epoch 30/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8045 - acc: 0.7138 - val_loss: 0.7661 - val_acc: 0.7350\n",
      "Epoch 31/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8034 - acc: 0.7149 - val_loss: 0.7762 - val_acc: 0.7010\n",
      "Epoch 32/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8003 - acc: 0.7193 - val_loss: 0.7641 - val_acc: 0.7290\n",
      "Epoch 33/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7989 - acc: 0.7145 - val_loss: 0.7665 - val_acc: 0.7220\n",
      "Epoch 34/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.8005 - acc: 0.7185 - val_loss: 0.7576 - val_acc: 0.7200\n",
      "Epoch 35/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7934 - acc: 0.7170 - val_loss: 0.7645 - val_acc: 0.7310\n",
      "Epoch 36/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7961 - acc: 0.7180 - val_loss: 0.7783 - val_acc: 0.7140\n",
      "Epoch 37/150\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.7901 - acc: 0.7169 - val_loss: 0.7554 - val_acc: 0.7320\n",
      "Epoch 38/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7919 - acc: 0.7189 - val_loss: 0.7524 - val_acc: 0.7330\n",
      "Epoch 39/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7866 - acc: 0.7191 - val_loss: 0.7714 - val_acc: 0.7070\n",
      "Epoch 40/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7844 - acc: 0.7203 - val_loss: 0.7544 - val_acc: 0.7240\n",
      "Epoch 41/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7848 - acc: 0.7212 - val_loss: 0.7624 - val_acc: 0.7250\n",
      "Epoch 42/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7833 - acc: 0.7212 - val_loss: 0.7647 - val_acc: 0.7160\n",
      "Epoch 43/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7817 - acc: 0.7175 - val_loss: 0.7510 - val_acc: 0.7310\n",
      "Epoch 44/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7784 - acc: 0.7234 - val_loss: 0.7544 - val_acc: 0.7100\n",
      "Epoch 45/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7795 - acc: 0.7204 - val_loss: 0.7605 - val_acc: 0.7150\n",
      "Epoch 46/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7780 - acc: 0.7169 - val_loss: 0.7581 - val_acc: 0.7260\n",
      "Epoch 47/150\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.7770 - acc: 0.7212 - val_loss: 0.7547 - val_acc: 0.7290\n",
      "Epoch 48/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7745 - acc: 0.7230 - val_loss: 0.7653 - val_acc: 0.7280\n",
      "Epoch 49/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7733 - acc: 0.7197 - val_loss: 0.7463 - val_acc: 0.7240\n",
      "Epoch 50/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7754 - acc: 0.7242 - val_loss: 0.7568 - val_acc: 0.7300\n",
      "Epoch 51/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7721 - acc: 0.7231 - val_loss: 0.7555 - val_acc: 0.7200\n",
      "Epoch 52/150\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.7694 - acc: 0.7254 - val_loss: 0.7563 - val_acc: 0.7290\n",
      "Epoch 53/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7721 - acc: 0.7192 - val_loss: 0.7688 - val_acc: 0.7220\n",
      "Epoch 54/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7687 - acc: 0.7261 - val_loss: 0.7546 - val_acc: 0.7280\n",
      "Epoch 55/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7685 - acc: 0.7251 - val_loss: 0.7546 - val_acc: 0.7240\n",
      "Epoch 56/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.7652 - acc: 0.7225 - val_loss: 0.7541 - val_acc: 0.7270\n",
      "Epoch 57/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7641 - acc: 0.7200 - val_loss: 0.7653 - val_acc: 0.7200\n",
      "Epoch 58/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7667 - acc: 0.7225 - val_loss: 0.7621 - val_acc: 0.7110\n",
      "Epoch 59/150\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7645 - acc: 0.7231 - val_loss: 0.7542 - val_acc: 0.7210\n",
      "Epoch 60/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7619 - acc: 0.7220 - val_loss: 0.7537 - val_acc: 0.7330\n",
      "Epoch 61/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7624 - acc: 0.7225 - val_loss: 0.7588 - val_acc: 0.7250\n",
      "Epoch 62/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7627 - acc: 0.7210 - val_loss: 0.7547 - val_acc: 0.7280\n",
      "Epoch 63/150\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.7582 - acc: 0.7240 - val_loss: 0.7586 - val_acc: 0.7200\n",
      "Epoch 64/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7583 - acc: 0.7235 - val_loss: 0.7486 - val_acc: 0.7340\n",
      "Epoch 65/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7593 - acc: 0.7232 - val_loss: 0.7540 - val_acc: 0.7230\n",
      "Epoch 66/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7545 - acc: 0.7266 - val_loss: 0.7655 - val_acc: 0.7330\n",
      "Epoch 67/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7563 - acc: 0.7252 - val_loss: 0.7678 - val_acc: 0.7190\n",
      "Epoch 68/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7528 - acc: 0.7257 - val_loss: 0.7617 - val_acc: 0.7130\n",
      "Epoch 69/150\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.7547 - acc: 0.7272 - val_loss: 0.7577 - val_acc: 0.7290\n",
      "Epoch 70/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7501 - acc: 0.7301 - val_loss: 0.7552 - val_acc: 0.7360\n",
      "Epoch 71/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7517 - acc: 0.7266 - val_loss: 0.7521 - val_acc: 0.7330\n",
      "Epoch 72/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7476 - acc: 0.7242 - val_loss: 0.7542 - val_acc: 0.7280\n",
      "Epoch 73/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7540 - acc: 0.7243 - val_loss: 0.7557 - val_acc: 0.7320\n",
      "Epoch 74/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7528 - acc: 0.7253 - val_loss: 0.7601 - val_acc: 0.7250\n",
      "Epoch 75/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7496 - acc: 0.7226 - val_loss: 0.7545 - val_acc: 0.7280\n",
      "Epoch 76/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7482 - acc: 0.7272 - val_loss: 0.7631 - val_acc: 0.7200\n",
      "Epoch 77/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7481 - acc: 0.7245 - val_loss: 0.7641 - val_acc: 0.7240\n",
      "Epoch 78/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7488 - acc: 0.7263 - val_loss: 0.7693 - val_acc: 0.7130\n",
      "Epoch 79/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7449 - acc: 0.7265 - val_loss: 0.7662 - val_acc: 0.7260\n",
      "Epoch 80/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7476 - acc: 0.7250 - val_loss: 0.7695 - val_acc: 0.7190\n",
      "Epoch 81/150\n",
      "10000/10000 [==============================] - 1s 81us/step - loss: 0.7441 - acc: 0.7268 - val_loss: 0.7539 - val_acc: 0.7220\n",
      "Epoch 82/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7444 - acc: 0.7309 - val_loss: 0.7570 - val_acc: 0.7280\n",
      "Epoch 83/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7430 - acc: 0.7282 - val_loss: 0.7589 - val_acc: 0.7260\n",
      "Epoch 84/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7451 - acc: 0.7276 - val_loss: 0.7644 - val_acc: 0.7240\n",
      "Epoch 85/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7441 - acc: 0.7255 - val_loss: 0.7608 - val_acc: 0.7130\n",
      "Epoch 86/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7419 - acc: 0.7254 - val_loss: 0.7633 - val_acc: 0.7140\n",
      "Epoch 87/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.7414 - acc: 0.7300 - val_loss: 0.7651 - val_acc: 0.7320\n",
      "Epoch 88/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7445 - acc: 0.7266 - val_loss: 0.7598 - val_acc: 0.7100\n",
      "Epoch 89/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7404 - acc: 0.7315 - val_loss: 0.7791 - val_acc: 0.7230\n",
      "Epoch 90/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7416 - acc: 0.7284 - val_loss: 0.7718 - val_acc: 0.7190\n",
      "Epoch 91/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7430 - acc: 0.7232 - val_loss: 0.7644 - val_acc: 0.7220\n",
      "Epoch 92/150\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.7382 - acc: 0.7299 - val_loss: 0.7584 - val_acc: 0.7280\n",
      "Epoch 93/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7412 - acc: 0.7284 - val_loss: 0.7542 - val_acc: 0.7290\n",
      "Epoch 94/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.7377 - acc: 0.7294 - val_loss: 0.7613 - val_acc: 0.7230\n",
      "Epoch 95/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7383 - acc: 0.7270 - val_loss: 0.7633 - val_acc: 0.7270\n",
      "Epoch 96/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7370 - acc: 0.7294 - val_loss: 0.7629 - val_acc: 0.7300\n",
      "Epoch 97/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.7355 - acc: 0.7270 - val_loss: 0.7620 - val_acc: 0.7210\n",
      "Epoch 98/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7364 - acc: 0.7305 - val_loss: 0.7714 - val_acc: 0.7030\n",
      "Epoch 99/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7367 - acc: 0.7273 - val_loss: 0.7721 - val_acc: 0.7070\n",
      "Epoch 100/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7368 - acc: 0.7245 - val_loss: 0.7664 - val_acc: 0.7190\n",
      "Epoch 101/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7341 - acc: 0.7285 - val_loss: 0.7722 - val_acc: 0.7120\n",
      "Epoch 102/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7351 - acc: 0.7282 - val_loss: 0.7755 - val_acc: 0.7140\n",
      "Epoch 103/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7333 - acc: 0.7299 - val_loss: 0.7766 - val_acc: 0.7290\n",
      "Epoch 104/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7349 - acc: 0.7262 - val_loss: 0.7738 - val_acc: 0.7080\n",
      "Epoch 105/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7352 - acc: 0.7304 - val_loss: 0.7610 - val_acc: 0.7290\n",
      "Epoch 106/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7325 - acc: 0.7303 - val_loss: 0.7586 - val_acc: 0.7300\n",
      "Epoch 107/150\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.7316 - acc: 0.7280 - val_loss: 0.7674 - val_acc: 0.7300\n",
      "Epoch 108/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7315 - acc: 0.7308 - val_loss: 0.7658 - val_acc: 0.7350\n",
      "Epoch 109/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7313 - acc: 0.7305 - val_loss: 0.7654 - val_acc: 0.7190\n",
      "Epoch 110/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7308 - acc: 0.7304 - val_loss: 0.7675 - val_acc: 0.7310\n",
      "Epoch 111/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7325 - acc: 0.7294 - val_loss: 0.7626 - val_acc: 0.7280\n",
      "Epoch 112/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7292 - acc: 0.7303 - val_loss: 0.7702 - val_acc: 0.7160\n",
      "Epoch 113/150\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.7278 - acc: 0.7292 - val_loss: 0.7703 - val_acc: 0.7290\n",
      "Epoch 114/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7311 - acc: 0.7284 - val_loss: 0.7758 - val_acc: 0.7160\n",
      "Epoch 115/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7310 - acc: 0.7297 - val_loss: 0.7681 - val_acc: 0.7280\n",
      "Epoch 116/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7291 - acc: 0.7289 - val_loss: 0.7747 - val_acc: 0.7250\n",
      "Epoch 117/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7301 - acc: 0.7282 - val_loss: 0.7609 - val_acc: 0.7340\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 118/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7274 - acc: 0.7301 - val_loss: 0.7687 - val_acc: 0.7270\n",
      "Epoch 119/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7283 - acc: 0.7315 - val_loss: 0.7662 - val_acc: 0.7220\n",
      "Epoch 120/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7266 - acc: 0.7309 - val_loss: 0.7684 - val_acc: 0.7230\n",
      "Epoch 121/150\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.7282 - acc: 0.7299 - val_loss: 0.7851 - val_acc: 0.7240\n",
      "Epoch 122/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7283 - acc: 0.7281 - val_loss: 0.7705 - val_acc: 0.7290\n",
      "Epoch 123/150\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.7297 - acc: 0.7306 - val_loss: 0.7694 - val_acc: 0.7280\n",
      "Epoch 124/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7298 - acc: 0.7272 - val_loss: 0.7774 - val_acc: 0.7240\n",
      "Epoch 125/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7260 - acc: 0.7319 - val_loss: 0.7753 - val_acc: 0.7140\n",
      "Epoch 126/150\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.7281 - acc: 0.7267 - val_loss: 0.7759 - val_acc: 0.7230\n",
      "Epoch 127/150\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.7258 - acc: 0.7290 - val_loss: 0.7806 - val_acc: 0.7240\n",
      "Epoch 128/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7274 - acc: 0.7301 - val_loss: 0.7650 - val_acc: 0.7310\n",
      "Epoch 129/150\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.7269 - acc: 0.7306 - val_loss: 0.7695 - val_acc: 0.7190\n",
      "Epoch 130/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.7270 - acc: 0.7295 - val_loss: 0.7757 - val_acc: 0.7310\n",
      "Epoch 131/150\n",
      "10000/10000 [==============================] - 1s 93us/step - loss: 0.7260 - acc: 0.7296 - val_loss: 0.7699 - val_acc: 0.7280\n",
      "Epoch 132/150\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.7230 - acc: 0.7315 - val_loss: 0.7830 - val_acc: 0.7200\n",
      "Epoch 133/150\n",
      "10000/10000 [==============================] - 1s 98us/step - loss: 0.7212 - acc: 0.7316 - val_loss: 0.7846 - val_acc: 0.7180\n",
      "Epoch 134/150\n",
      "10000/10000 [==============================] - 1s 100us/step - loss: 0.7237 - acc: 0.7284 - val_loss: 0.7804 - val_acc: 0.7270\n",
      "Epoch 135/150\n",
      "10000/10000 [==============================] - 1s 100us/step - loss: 0.7207 - acc: 0.7317 - val_loss: 0.7921 - val_acc: 0.7200\n",
      "Epoch 136/150\n",
      "10000/10000 [==============================] - 1s 103us/step - loss: 0.7221 - acc: 0.7309 - val_loss: 0.7845 - val_acc: 0.7240\n",
      "Epoch 137/150\n",
      "10000/10000 [==============================] - 1s 101us/step - loss: 0.7217 - acc: 0.7322 - val_loss: 0.7744 - val_acc: 0.7200\n",
      "Epoch 138/150\n",
      "10000/10000 [==============================] - 1s 99us/step - loss: 0.7229 - acc: 0.7269 - val_loss: 0.7704 - val_acc: 0.7290\n",
      "Epoch 139/150\n",
      "10000/10000 [==============================] - 1s 95us/step - loss: 0.7227 - acc: 0.7284 - val_loss: 0.7743 - val_acc: 0.7270\n",
      "Epoch 140/150\n",
      "10000/10000 [==============================] - 1s 94us/step - loss: 0.7186 - acc: 0.7295 - val_loss: 0.7713 - val_acc: 0.7370\n",
      "Epoch 141/150\n",
      "10000/10000 [==============================] - 1s 95us/step - loss: 0.7214 - acc: 0.7316 - val_loss: 0.7817 - val_acc: 0.7120\n",
      "Epoch 142/150\n",
      "10000/10000 [==============================] - 1s 91us/step - loss: 0.7207 - acc: 0.7294 - val_loss: 0.7827 - val_acc: 0.7160\n",
      "Epoch 143/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.7227 - acc: 0.7305 - val_loss: 0.7745 - val_acc: 0.7220\n",
      "Epoch 144/150\n",
      "10000/10000 [==============================] - 1s 89us/step - loss: 0.7202 - acc: 0.7299 - val_loss: 0.7768 - val_acc: 0.7200\n",
      "Epoch 145/150\n",
      "10000/10000 [==============================] - 1s 89us/step - loss: 0.7195 - acc: 0.7310 - val_loss: 0.7748 - val_acc: 0.7250\n",
      "Epoch 146/150\n",
      "10000/10000 [==============================] - 1s 98us/step - loss: 0.7204 - acc: 0.7309 - val_loss: 0.7811 - val_acc: 0.7220\n",
      "Epoch 147/150\n",
      "10000/10000 [==============================] - 1s 99us/step - loss: 0.7206 - acc: 0.7302 - val_loss: 0.7833 - val_acc: 0.7270\n",
      "Epoch 148/150\n",
      "10000/10000 [==============================] - 1s 94us/step - loss: 0.7213 - acc: 0.7307 - val_loss: 0.7702 - val_acc: 0.7280\n",
      "Epoch 149/150\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.7192 - acc: 0.7317 - val_loss: 0.7824 - val_acc: 0.7220\n",
      "Epoch 150/150\n",
      "10000/10000 [==============================] - 1s 98us/step - loss: 0.7192 - acc: 0.7330 - val_loss: 0.7874 - val_acc: 0.7120\n"
     ]
    }
   ],
   "source": [
    "input_shape=(9,)\n",
    "num_classes = 10\n",
    "model_rbm = keras.Sequential()\n",
    "model_rbm.add(Dense(256, activation=\"sigmoid\",input_shape=input_shape))\n",
    "model_rbm.add(Dropout(0.2))\n",
    "model_rbm.add(Dense(256, activation=\"sigmoid\",input_shape=input_shape))\n",
    "model_rbm.add(Dense(num_classes, activation='softmax'))\n",
    "\n",
    "model_rbm.compile(loss=keras.losses.sparse_categorical_crossentropy,\n",
    "              optimizer=keras.optimizers.Adam(lr=0.001,beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False),\n",
    "              metrics=['accuracy'])\n",
    "rbm_train=model_rbm.fit(rbm_hidden,tr_labels,batch_size=20,\n",
    "          epochs=150,validation_data=(val_hidden,val_lab))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(rbm_train.history['loss'],label=\"training loss\")\n",
    "plt.plot(rbm_train.history['val_loss'],label=\"validation loss\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 22us/step\n",
      "0.7273\n"
     ]
    }
   ],
   "source": [
    "loss,acc = model_rbm.evaluate(test_hidden,test_labels)\n",
    "print(acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### auto encoder 3_part_d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_24 (Dense)             (None, 128)               3328      \n",
      "_________________________________________________________________\n",
      "dense_25 (Dense)             (None, 9)                 1161      \n",
      "_________________________________________________________________\n",
      "dense_26 (Dense)             (None, 128)               1280      \n",
      "_________________________________________________________________\n",
      "dense_27 (Dense)             (None, 25)                3225      \n",
      "=================================================================\n",
      "Total params: 8,994\n",
      "Trainable params: 8,994\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.layers import Input, Dense\n",
    "from tensorflow.keras.models import Model\n",
    "# this is the size of our encoded representations\n",
    "encoding_dim = 9\n",
    "\n",
    "# input_img = Input(shape=(25,))\n",
    "h1 = Dense(128, activation='relu',input_shape=(25,))\n",
    "h2 = Dense(encoding_dim, activation='relu',input_shape=(128,))\n",
    "\n",
    "h3 = Dense(128,activation=\"relu\",input_shape=(9,))\n",
    "h4 = Dense(25, activation='sigmoid',input_shape=(128,))\n",
    "autoencoder = keras.Sequential([h1,h2,h3,h4])\n",
    "autoencoder.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_24 (Dense)             (None, 128)               3328      \n",
      "_________________________________________________________________\n",
      "dense_25 (Dense)             (None, 9)                 1161      \n",
      "=================================================================\n",
      "Total params: 4,489\n",
      "Trainable params: 4,489\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "##encoder model\n",
    "encoder = keras.Sequential([h1,h2])\n",
    "print(encoder.summary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_26 (Dense)             (None, 128)               1280      \n",
      "_________________________________________________________________\n",
      "dense_27 (Dense)             (None, 25)                3225      \n",
      "=================================================================\n",
      "Total params: 4,505\n",
      "Trainable params: 4,505\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "#decoder model\n",
    "decoder = keras.Sequential([h3,h4])\n",
    "print(decoder.summary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "autoencoder.compile(loss=keras.losses.mean_squared_error,\n",
    "              optimizer=keras.optimizers.Adam(lr=0.001,beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False),\n",
    "            )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/50\n",
      "10000/10000 [==============================] - 1s 62us/step - loss: 94416.5776\n",
      "Epoch 2/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94414.8831\n",
      "Epoch 3/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94412.6864\n",
      "Epoch 4/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94410.1299\n",
      "Epoch 5/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94407.2832\n",
      "Epoch 6/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94406.6321\n",
      "Epoch 7/50\n",
      "10000/10000 [==============================] - 0s 12us/step - loss: 94405.4187\n",
      "Epoch 8/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94405.1622\n",
      "Epoch 9/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94403.3155\n",
      "Epoch 10/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94403.5363\n",
      "Epoch 11/50\n",
      "10000/10000 [==============================] - 0s 12us/step - loss: 94401.6731\n",
      "Epoch 12/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94402.3172\n",
      "Epoch 13/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94401.1894\n",
      "Epoch 14/50\n",
      "10000/10000 [==============================] - 0s 12us/step - loss: 94402.3105\n",
      "Epoch 15/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94401.5584\n",
      "Epoch 16/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94402.1611\n",
      "Epoch 17/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94400.2894\n",
      "Epoch 18/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94400.0725\n",
      "Epoch 19/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94398.9086\n",
      "Epoch 20/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94399.9934\n",
      "Epoch 21/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94400.4428\n",
      "Epoch 22/50\n",
      "10000/10000 [==============================] - 0s 12us/step - loss: 94398.9049\n",
      "Epoch 23/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94398.7255\n",
      "Epoch 24/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94398.5831\n",
      "Epoch 25/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94398.8460\n",
      "Epoch 26/50\n",
      "10000/10000 [==============================] - 0s 13us/step - loss: 94397.5799\n",
      "Epoch 27/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94397.8394\n",
      "Epoch 28/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94396.8796\n",
      "Epoch 29/50\n",
      "10000/10000 [==============================] - 0s 12us/step - loss: 94397.4596\n",
      "Epoch 30/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94396.8345\n",
      "Epoch 31/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94396.5453\n",
      "Epoch 32/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94397.5761\n",
      "Epoch 33/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94396.1441\n",
      "Epoch 34/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94397.2882\n",
      "Epoch 35/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94396.0996\n",
      "Epoch 36/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94396.5567\n",
      "Epoch 37/50\n",
      "10000/10000 [==============================] - 0s 12us/step - loss: 94396.4611\n",
      "Epoch 38/50\n",
      "10000/10000 [==============================] - 0s 13us/step - loss: 94396.1340\n",
      "Epoch 39/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94395.6987\n",
      "Epoch 40/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94394.8780\n",
      "Epoch 41/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94394.1428\n",
      "Epoch 42/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94393.4778\n",
      "Epoch 43/50\n",
      "10000/10000 [==============================] - 0s 12us/step - loss: 94393.5134\n",
      "Epoch 44/50\n",
      "10000/10000 [==============================] - 0s 9us/step - loss: 94393.1321\n",
      "Epoch 45/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94393.3244\n",
      "Epoch 46/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94392.7186\n",
      "Epoch 47/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94392.6609\n",
      "Epoch 48/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94392.6788\n",
      "Epoch 49/50\n",
      "10000/10000 [==============================] - 0s 11us/step - loss: 94393.0108\n",
      "Epoch 50/50\n",
      "10000/10000 [==============================] - 0s 10us/step - loss: 94392.2953\n"
     ]
    }
   ],
   "source": [
    "ae_train = autoencoder.fit(red_data, red_data,\n",
    "                epochs=50,\n",
    "                batch_size=128,\n",
    "                shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f7b5eec2390>]"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(ae_train.history['loss'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_26 (Dense)             (None, 128)               1280      \n",
      "_________________________________________________________________\n",
      "dense_27 (Dense)             (None, 25)                3225      \n",
      "=================================================================\n",
      "Total params: 4,505\n",
      "Trainable params: 4,505\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "decoder.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "encoded_data = encoder.predict(red_data)\n",
    "val_encoded = encoder.predict(val_img)\n",
    "test_encoded = encoder.predict(test_images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 10000 samples, validate on 1000 samples\n",
      "Epoch 1/75\n",
      "10000/10000 [==============================] - 1s 139us/step - loss: 0.9448 - acc: 0.6995 - val_loss: 0.6590 - val_acc: 0.7840\n",
      "Epoch 2/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.6797 - acc: 0.7716 - val_loss: 0.5584 - val_acc: 0.8120\n",
      "Epoch 3/75\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.6476 - acc: 0.7813 - val_loss: 0.5559 - val_acc: 0.8130\n",
      "Epoch 4/75\n",
      "10000/10000 [==============================] - 1s 90us/step - loss: 0.6329 - acc: 0.7825 - val_loss: 0.5348 - val_acc: 0.8170\n",
      "Epoch 5/75\n",
      "10000/10000 [==============================] - 1s 96us/step - loss: 0.6201 - acc: 0.7928 - val_loss: 0.5408 - val_acc: 0.8110\n",
      "Epoch 6/75\n",
      "10000/10000 [==============================] - 1s 91us/step - loss: 0.6123 - acc: 0.7930 - val_loss: 0.5336 - val_acc: 0.8170\n",
      "Epoch 7/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.5856 - acc: 0.8037 - val_loss: 0.5084 - val_acc: 0.8220\n",
      "Epoch 8/75\n",
      "10000/10000 [==============================] - 1s 90us/step - loss: 0.5862 - acc: 0.7965 - val_loss: 0.4915 - val_acc: 0.8370\n",
      "Epoch 9/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.5629 - acc: 0.8074 - val_loss: 0.4959 - val_acc: 0.8370\n",
      "Epoch 10/75\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.5535 - acc: 0.8139 - val_loss: 0.4968 - val_acc: 0.8250\n",
      "Epoch 11/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.5567 - acc: 0.8111 - val_loss: 0.4810 - val_acc: 0.8340\n",
      "Epoch 12/75\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.5312 - acc: 0.8228 - val_loss: 0.4994 - val_acc: 0.8240\n",
      "Epoch 13/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.5311 - acc: 0.8182 - val_loss: 0.4994 - val_acc: 0.8290\n",
      "Epoch 14/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.5293 - acc: 0.8223 - val_loss: 0.4911 - val_acc: 0.8270\n",
      "Epoch 15/75\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.5154 - acc: 0.8252 - val_loss: 0.4846 - val_acc: 0.8260\n",
      "Epoch 16/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.5188 - acc: 0.8211 - val_loss: 0.4832 - val_acc: 0.8360\n",
      "Epoch 17/75\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.5201 - acc: 0.8216 - val_loss: 0.4660 - val_acc: 0.8380\n",
      "Epoch 18/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.5124 - acc: 0.8236 - val_loss: 0.5012 - val_acc: 0.8150\n",
      "Epoch 19/75\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.5054 - acc: 0.8296 - val_loss: 0.4699 - val_acc: 0.8290\n",
      "Epoch 20/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.4969 - acc: 0.8309 - val_loss: 0.4782 - val_acc: 0.8150\n",
      "Epoch 21/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4898 - acc: 0.8347 - val_loss: 0.4614 - val_acc: 0.8330\n",
      "Epoch 22/75\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.4819 - acc: 0.8355 - val_loss: 0.4554 - val_acc: 0.8360\n",
      "Epoch 23/75\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.4772 - acc: 0.8349 - val_loss: 0.4468 - val_acc: 0.8370\n",
      "Epoch 24/75\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.4737 - acc: 0.8356 - val_loss: 0.4440 - val_acc: 0.8330\n",
      "Epoch 25/75\n",
      "10000/10000 [==============================] - 1s 78us/step - loss: 0.4733 - acc: 0.8366 - val_loss: 0.4742 - val_acc: 0.8310\n",
      "Epoch 26/75\n",
      "10000/10000 [==============================] - 1s 81us/step - loss: 0.4633 - acc: 0.8403 - val_loss: 0.4642 - val_acc: 0.8360\n",
      "Epoch 27/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4663 - acc: 0.8381 - val_loss: 0.4471 - val_acc: 0.8360\n",
      "Epoch 28/75\n",
      "10000/10000 [==============================] - 1s 81us/step - loss: 0.4654 - acc: 0.8419 - val_loss: 0.4616 - val_acc: 0.8450\n",
      "Epoch 29/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4616 - acc: 0.8359 - val_loss: 0.4401 - val_acc: 0.8420\n",
      "Epoch 30/75\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.4578 - acc: 0.8436 - val_loss: 0.4413 - val_acc: 0.8450\n",
      "Epoch 31/75\n",
      "10000/10000 [==============================] - 1s 81us/step - loss: 0.4548 - acc: 0.8426 - val_loss: 0.4504 - val_acc: 0.8390\n",
      "Epoch 32/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4567 - acc: 0.8416 - val_loss: 0.4739 - val_acc: 0.8290\n",
      "Epoch 33/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4549 - acc: 0.8422 - val_loss: 0.4355 - val_acc: 0.8440\n",
      "Epoch 34/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.4534 - acc: 0.8439 - val_loss: 0.4656 - val_acc: 0.8450\n",
      "Epoch 35/75\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.4443 - acc: 0.8479 - val_loss: 0.4450 - val_acc: 0.8480\n",
      "Epoch 36/75\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.4512 - acc: 0.8415 - val_loss: 0.4420 - val_acc: 0.8440\n",
      "Epoch 37/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4448 - acc: 0.8417 - val_loss: 0.4511 - val_acc: 0.8380\n",
      "Epoch 38/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4371 - acc: 0.8467 - val_loss: 0.4484 - val_acc: 0.8280\n",
      "Epoch 39/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.4377 - acc: 0.8426 - val_loss: 0.4403 - val_acc: 0.8410\n",
      "Epoch 40/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.4357 - acc: 0.8476 - val_loss: 0.4265 - val_acc: 0.8390\n",
      "Epoch 41/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.4350 - acc: 0.8485 - val_loss: 0.4220 - val_acc: 0.8530\n",
      "Epoch 42/75\n",
      "10000/10000 [==============================] - 1s 90us/step - loss: 0.4234 - acc: 0.8516 - val_loss: 0.4456 - val_acc: 0.8430\n",
      "Epoch 43/75\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.4285 - acc: 0.8476 - val_loss: 0.4215 - val_acc: 0.8590\n",
      "Epoch 44/75\n",
      "10000/10000 [==============================] - 1s 93us/step - loss: 0.4219 - acc: 0.8484 - val_loss: 0.4343 - val_acc: 0.8470\n",
      "Epoch 45/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.4283 - acc: 0.8489 - val_loss: 0.4324 - val_acc: 0.8560\n",
      "Epoch 46/75\n",
      "10000/10000 [==============================] - 1s 104us/step - loss: 0.4187 - acc: 0.8502 - val_loss: 0.4105 - val_acc: 0.8540\n",
      "Epoch 47/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.4207 - acc: 0.8506 - val_loss: 0.4258 - val_acc: 0.8480\n",
      "Epoch 48/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.4157 - acc: 0.8507 - val_loss: 0.4245 - val_acc: 0.8440\n",
      "Epoch 49/75\n",
      "10000/10000 [==============================] - 1s 92us/step - loss: 0.4164 - acc: 0.8520 - val_loss: 0.4154 - val_acc: 0.8630\n",
      "Epoch 50/75\n",
      "10000/10000 [==============================] - 1s 89us/step - loss: 0.4173 - acc: 0.8536 - val_loss: 0.4213 - val_acc: 0.8550\n",
      "Epoch 51/75\n",
      "10000/10000 [==============================] - 1s 97us/step - loss: 0.4090 - acc: 0.8526 - val_loss: 0.4202 - val_acc: 0.8540\n",
      "Epoch 52/75\n",
      "10000/10000 [==============================] - 1s 95us/step - loss: 0.4091 - acc: 0.8555 - val_loss: 0.4155 - val_acc: 0.8560\n",
      "Epoch 53/75\n",
      "10000/10000 [==============================] - 1s 87us/step - loss: 0.4067 - acc: 0.8545 - val_loss: 0.4598 - val_acc: 0.8280\n",
      "Epoch 54/75\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.4020 - acc: 0.8613 - val_loss: 0.4408 - val_acc: 0.8440\n",
      "Epoch 55/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.4006 - acc: 0.8591 - val_loss: 0.4388 - val_acc: 0.8460\n",
      "Epoch 56/75\n",
      "10000/10000 [==============================] - 1s 85us/step - loss: 0.3889 - acc: 0.8640 - val_loss: 0.4397 - val_acc: 0.8410\n",
      "Epoch 57/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.3945 - acc: 0.8577 - val_loss: 0.4370 - val_acc: 0.8540\n",
      "Epoch 58/75\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.3919 - acc: 0.8623 - val_loss: 0.4164 - val_acc: 0.8520\n",
      "Epoch 59/75\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.3918 - acc: 0.8584 - val_loss: 0.4290 - val_acc: 0.8610\n",
      "Epoch 60/75\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.3887 - acc: 0.8605 - val_loss: 0.4230 - val_acc: 0.8590\n",
      "Epoch 61/75\n",
      "10000/10000 [==============================] - 1s 88us/step - loss: 0.3826 - acc: 0.8610 - val_loss: 0.4150 - val_acc: 0.8570\n",
      "Epoch 62/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.3872 - acc: 0.8601 - val_loss: 0.4080 - val_acc: 0.8520\n",
      "Epoch 63/75\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.3803 - acc: 0.8644 - val_loss: 0.4059 - val_acc: 0.8640\n",
      "Epoch 64/75\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.3775 - acc: 0.8659 - val_loss: 0.4188 - val_acc: 0.8530\n",
      "Epoch 65/75\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.3780 - acc: 0.8661 - val_loss: 0.4148 - val_acc: 0.8610\n",
      "Epoch 66/75\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.3889 - acc: 0.8593 - val_loss: 0.4091 - val_acc: 0.8690\n",
      "Epoch 67/75\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.3844 - acc: 0.8591 - val_loss: 0.4291 - val_acc: 0.8530\n",
      "Epoch 68/75\n",
      "10000/10000 [==============================] - 1s 82us/step - loss: 0.3821 - acc: 0.8619 - val_loss: 0.4164 - val_acc: 0.8520\n",
      "Epoch 69/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.3982 - acc: 0.8607 - val_loss: 0.4263 - val_acc: 0.8460\n",
      "Epoch 70/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.3814 - acc: 0.8671 - val_loss: 0.4074 - val_acc: 0.8550\n",
      "Epoch 71/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.3764 - acc: 0.8636 - val_loss: 0.4038 - val_acc: 0.8620\n",
      "Epoch 72/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.3762 - acc: 0.8643 - val_loss: 0.4354 - val_acc: 0.8530\n",
      "Epoch 73/75\n",
      "10000/10000 [==============================] - 1s 83us/step - loss: 0.3797 - acc: 0.8605 - val_loss: 0.4169 - val_acc: 0.8460\n",
      "Epoch 74/75\n",
      "10000/10000 [==============================] - 1s 84us/step - loss: 0.3666 - acc: 0.8689 - val_loss: 0.4136 - val_acc: 0.8600\n",
      "Epoch 75/75\n",
      "10000/10000 [==============================] - 1s 86us/step - loss: 0.3744 - acc: 0.8625 - val_loss: 0.4100 - val_acc: 0.8480\n"
     ]
    }
   ],
   "source": [
    "### now training the dnn\n",
    "input_shape=(9,)\n",
    "num_classes = 10\n",
    "model_encoder = keras.Sequential()\n",
    "model_encoder.add(Dense(256, activation=\"sigmoid\",input_shape=input_shape))\n",
    "model_encoder.add(Dropout(0.2))\n",
    "model_encoder.add(Dense(256, activation=\"sigmoid\",input_shape=input_shape))\n",
    "model_encoder.add(Dense(num_classes, activation='softmax'))\n",
    "\n",
    "model_encoder.compile(loss=keras.losses.sparse_categorical_crossentropy,\n",
    "              optimizer=keras.optimizers.Adam(lr=0.001,beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False),\n",
    "              metrics=['accuracy'])\n",
    "encoder_hidden_train=model_encoder.fit(encoded_data,tr_labels,batch_size=20,\n",
    "          epochs=75,validation_data=(val_encoded,val_lab))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(encoder_hidden_train.history['loss'],label =\"train loss\")\n",
    "plt.plot(encoder_hidden_train.history['val_loss'],label =\" val loss\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 0s 21us/step\n",
      "0.8617\n"
     ]
    }
   ],
   "source": [
    "loss,acc = model_encoder.evaluate(test_encoded,test_labels)\n",
    "print(acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
